0

复制

C#中未知长度的数组

如何在不需要初始化长度的情况下初始化 string[]?我希望它是动态数组,所以当我添加一些东西时,长度会增加并且不会引发异常?

我应该只使用某种列表吗?

4

7 回答 7

6

如果您需要一个未知长度的数组strings,请使用命名空间中List<T>的a System.Collections.Generic

List<string> myList = new List<string>();
myList.Add("First");
myList.Add("Second");
myList.Add("Third");
myList.Count // = 3

这在幕后使用了一个固定大小的数组,但它隐藏了这样一个事实,即它会使数组变大并在空间不足时移动所有元素。

于 2009-04-04T01:51:07.553 回答
3

List<T>会做你想做的事。这有一个ToArray()方法,当您完成添加项目时将返回一个数组(如果您仍然需要一个数组)。

于 2009-04-04T01:51:55.027 回答
1

我认为很多语言都会预先将整个数组分配为一个块。您可能需要使用提供此功能的包装类。在没有指定语言的情况下,例如 Java 和 C++,int[] 将是一个连续的内存块。您必须分配一个新块并复制旧内容,或者使用一个为您管理它的包装器,要么做同样的事情,要么使用指向对象的指针。那将是Java中的ArrayList或类似的东西。

于 2009-04-04T01:44:19.723 回答
1

在大多数语言中,数组具有固定长度。如果您需要动态长度,则必须使用动态数据类型,如列表。

如果语言本身不支持列表,它们通常用数组实现。如果内容变得太长而无法放入数组,则分配更长的数组,将内容从旧数组复制到新数组,最后释放旧数组。

我很确定您的语言或其库之一中存在动态长度类型。

更新

对于 C#,集合类位于System.Collections命名空间中。System.Collections.Generic如果可能,您应该关注泛型类。四个你的情况,通用List<String>可能最适合。但也Stack<String>Queue<String>可能很有趣。

于 2009-04-04T01:45:37.973 回答
1

什么语言?

C#、Java 和许多其他高级语言具有ArrayList允许您添加和删除元素而无需设置特定大小的数据结构(或类似的东西)。

于 2009-04-04T01:45:48.923 回答
1

好吧,在 fortran 中你可以使用 ALLOCATE。

于 2009-04-04T01:46:46.910 回答
0

如果您使用 C#,请使用 ArrayList。它会根据您的需要动态扩展,它也可以容纳任何东西(这可能是好的也可能是坏的)。所以是的,你应该使用某种列表。还记得包括这个 using 语句:

using System.Collections;
于 2009-04-04T01:44:22.657 回答