复制
如何在不需要初始化长度的情况下初始化 string[]?我希望它是动态数组,所以当我添加一些东西时,长度会增加并且不会引发异常?
我应该只使用某种列表吗?
如果您需要一个未知长度的数组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
这在幕后使用了一个固定大小的数组,但它隐藏了这样一个事实,即它会使数组变大并在空间不足时移动所有元素。
我认为很多语言都会预先将整个数组分配为一个块。您可能需要使用提供此功能的包装类。在没有指定语言的情况下,例如 Java 和 C++,int[] 将是一个连续的内存块。您必须分配一个新块并复制旧内容,或者使用一个为您管理它的包装器,要么做同样的事情,要么使用指向对象的指针。那将是Java中的ArrayList或类似的东西。
在大多数语言中,数组具有固定长度。如果您需要动态长度,则必须使用动态数据类型,如列表。
如果语言本身不支持列表,它们通常用数组实现。如果内容变得太长而无法放入数组,则分配更长的数组,将内容从旧数组复制到新数组,最后释放旧数组。
我很确定您的语言或其库之一中存在动态长度类型。
更新
对于 C#,集合类位于System.Collections
命名空间中。System.Collections.Generic
如果可能,您应该关注泛型类。四个你的情况,通用List<String>
可能最适合。但也Stack<String>
或Queue<String>
可能很有趣。
什么语言?
C#、Java 和许多其他高级语言具有ArrayList
允许您添加和删除元素而无需设置特定大小的数据结构(或类似的东西)。
好吧,在 fortran 中你可以使用 ALLOCATE。
如果您使用 C#,请使用 ArrayList。它会根据您的需要动态扩展,它也可以容纳任何东西(这可能是好的也可能是坏的)。所以是的,你应该使用某种列表。还记得包括这个 using 语句:
using System.Collections;