C#中未知长度的数组
我刚刚开始学习C#,并在数组的介绍中,他们展示了如何build立一个variables作为一个数组,但似乎是必须指定在赋值数组的长度,所以如果我不知道的长度arrays?
数组必须分配一个长度。 要允许任何数量的元素,请使用List
类。
例如:
List<int> myInts = new List<int>(); myInts.Add(5); myInts.Add(10); myInts.Add(11); myInts.Count // = 3
使用List<>
来build立一个未知长度的“数组”。
使用List<>.ToArray()
返回一个真实的数组,而不是一个List
。
var list = new List<int>(); list.Add(1); list.Add(2); list.Add(3); var array = list.ToArray();
您可以创build一个大小设置为一个variables的数组,即
int size = 50; string[] words = new string[size]; // contains 50 strings
但是,如果您决定需要100个单词,那么这个大小不能改变。 如果您需要的大小是真正dynamic的,您将需要使用不同的数据结构。 尝试List
。
一点背景资料:
如上所述,如果你想有一个dynamic的东西集合,使用List<T>
。 在内部,List也使用数组来存储。 该数组具有与其他数组一样的固定大小。 一旦数组被声明为具有大小,它不会改变。 将项目添加到List
,将其添加到数组中。 最初, List
开始与我相信有一个16长度的数组。当您尝试将第17项添加到List
,会发生什么是一个新的数组分配,这是(我认为)两倍的大小老一个,那么32个项目。 然后将旧数组的内容复制到新数组中。 所以虽然List
对外部观察者来说可能是dynamic的,但是在内部它也必须遵守规则。
正如你可能已经猜到的那样,数组的拷贝和分配并不是免费的,所以应该尽可能less地使用这些数组,并且可以指定(在List
的构造函数中)数组的初始大小,在一个完美的场景中,它足以容纳你想要的一切。 然而,这是微观优化,对你来说不太可能是重要的,但总是很高兴知道你在做什么。
如果你的数据是唯一的,你可能也想看看Dictionarys,这会给你两列。
用户名,总帐单
它给你很多内置的工具来search和更新值。
如果在.NET 1.x中使用ArrayList
,或者在.NET 2.0或3.x中使用List<yourtype>
。
在System.Collections
和System.Collections.Generics
search它们。
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!");
尝试一个通用列表,而不是数组
简而言之,请使用Collections和Generics。
对任何C#开发人员来说都是必须的,值得花时间去学习:)
如上所述,通用List <>是最好的方法。
如果你被困在.NET 1. *中,那么你将不得不使用ArrayList类。 这没有编译时types检查,你也必须添加铸造 – 凌乱。
连续版本也实现了各种变体 – 包括线程安全变体。