我刚刚开始学习C#,在数组的介绍中,他们展示了如何将变量建立为数组,但似乎必须在赋值时指定数组的长度,那么如果我不知道数组的长度?
答案 0 :(得分:103)
必须为数组指定长度。要允许任意数量的元素,请使用List
类。
例如:
List<int> myInts = new List<int>();
myInts.Add(5);
myInts.Add(10);
myInts.Add(11);
myInts.Count // = 3
答案 1 :(得分:36)
使用List<>
建立一个未知长度的'数组'。
使用List<>.ToArray()
返回真实数组,而不是List
。
var list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
var array = list.ToArray();
答案 2 :(得分:14)
您可以创建一个大小设置为变量的数组,即
int size = 50;
string[] words = new string[size]; // contains 50 strings
但是,如果你决定需要100个单词,那么这个大小以后就无法改变。如果您需要大小非常动态,则需要使用不同类型的数据结构。试试List
。
答案 3 :(得分:14)
一些背景信息:
如上所述,如果您想要动态收集内容,请使用List<T>
。在内部,List也使用数组进行存储。该数组具有固定大小,就像任何其他数组一样。一旦数组被声明为具有大小,它就不会改变。将项目添加到List
时,会将其添加到数组中。最初,List
以一个我认为长度为16的数组开始。当你尝试将第17个项添加到List
时,会发生的是分配一个新数组,即(我认为)是旧款的两倍,所以32件。然后将旧数组的内容复制到新数组中。因此,虽然List
可能对外部观察者来说是动态的,但在内部它也必须符合规则。
正如您可能已经猜到的那样,数组的复制和分配并不是免费的,因此应该尽可能少地使用这些数组,并且可以指定(在List
的构造函数中) )阵列的初始大小,在完美的场景中,它足以容纳你想要的一切。然而,这是微观优化,它不太可能对你有用,但总是很高兴知道你实际上在做什么。
答案 4 :(得分:3)
如果在.NET 1.x中使用ArrayList
,或在.NET 2.0或3.x中使用List<yourtype>
。
在System.Collections
和System.Collections.Generics
中搜索它们。
答案 5 :(得分:2)
如果您的数据是唯一的,您可能还想查看Dictionarys。这将为您提供两列可供使用。
用户名,总帐单
它为您提供了许多内置工具来搜索和更新值。
答案 6 :(得分:1)
var yummy = new List<string>();
while(person.FeelsHappy()) {
yummy.Add(person.GetNewFavoriteFood());
}
Console.WriteLine("Sweet! I have a list of size {0}.", list.Count);
Console.WriteLine("I didn't even need to know how big to make it " +
"until I finished making it!");
答案 7 :(得分:1)
尝试通用列表而不是数组
答案 8 :(得分:1)
简而言之,请使用Collections and Generics。
这对任何C#开发者来说都是必须的,值得花时间学习:)
答案 9 :(得分:1)
如上所述,通用列表&lt;&gt;是最好的方式。
如果您遇到.NET 1. *,那么您将不得不使用ArrayList类。这没有编译时类型检查,你还必须添加cast - messy。
连续版本还实现了各种变体 - 包括线程安全变体。
答案 10 :(得分:1)
如果确实需要使用数组而不是列表,则可以创建一个数组,其大小在运行时像这样...
例如,我想要一个大小为n×n的二维数组。 n将在运行时从用户获取
int n = 0;
bool isInteger = int.TryPase(Console.ReadLine(), out n);
var x = new int[n,n];