C#中未知长度的数组

Unk*_*ech 76 c# arrays

我刚刚开始学习C#,在数组的介绍中,他们展示了如何将变量建立为数组,但似乎必须在赋值时指定数组的长度,那么如果我不知道数组的长度呢?阵列?

Sam*_*uel 108

必须为数组指定长度.要允许任意数量的元素,请使用List该类.

例如:

List<int> myInts = new List<int>();
myInts.Add(5);
myInts.Add(10);
myInts.Add(11);
myInts.Count // = 3
Run Code Online (Sandbox Code Playgroud)

  • 如果是二维怎么办? (2认同)
  • List &lt;int []&gt; myInts = new List &lt;int []&gt;();`可以工作。 (2认同)
  • 如果数组必须分配长度,那么为什么我可以这样做: String[] arr = "test;the;values;now".Split(';'); 它只决定长度?但我不能采用同一行代码,并将变量声明移至另一行。 (2认同)

TFD*_*TFD 38

使用List<>建立一个未知的长度的"数组".

使用List<>.ToArray()返回真正的数组,而不是一个List.

var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
var array = list.ToArray();
Run Code Online (Sandbox Code Playgroud)

  • 使用System.Collections.Generic; (2认同)

Jul*_*anR 16

一点背景资料:

如上所述,如果你想拥有一个动态的东西集合,请使用List<T>.在内部,List也使用数组进行存储.该数组具有固定大小,就像任何其他数组一样.一旦数组被声明为具有大小,它就不会改变.将项添加到a时List,会将其添加到数组中.最初,我List开始使用一个我认为长度为16的数组.当你尝试添加第17个项目时List,会发生什么是分配一个新数组,这是(我认为)两倍于旧数组的大小. ,所以32项.然后将旧数组的内容复制到新数组中.因此,虽然a List对于外部观察者来说可能看起来很动态,但在内部它也必须遵守规则.

正如您可能已经猜到的那样,数组的复制和分配并不是免费的,因此应该尽可能少地使用这些List数组,并且可以指定(在构造函数中)数组的初始大小,在一个完美的场景中,它足以容纳你想要的一切.然而,这是微观优化,它不太可能对你有用,但知道你实际在做什么总是很好.

  • 这正是我所追求的信息。发现并比大多数其他答案提供更多信息。+1 (2认同)

mqp*_*mqp 15

您可以创建一个大小设置为变量的数组,即

int size = 50;
string[] words = new string[size]; // contains 50 strings
Run Code Online (Sandbox Code Playgroud)

但是,如果您决定需要100个单词,那么这个大小以后就无法改变.如果您需要大小非常动态,则需要使用不同类型的数据结构.试试List.