我需要的是数组,但让我随时分配一个元素,并检查是否已经分配给特定索引的值大约是
MyArray<string> a = new MyArray<string>();
a[10] = "ten";
bool isTheFifthElementDefined = a[5] != null; // false
也许具有ContainsKey
方法的Dictionary<int, string>
可以做到,但是如果我只想使用数字键的订购集合,则没有更合适的数据结构?
我还需要通过定义的元素(最好是foreach或linq)访问当前元素的值和关键。
正如您提到的Dictionary
似乎更合适的。您所有元素的默认临时值。
List<string> myList = new List<string>(Enumerable.Repeat("",5000));
myList[2300] = "bla bla bla..";
int:
List<int> myList = new List<int>(Enumerable.Repeat(0,5000));
for custom type
:
List<MyClass> myList = new List<MyClass>(Enumerable.Repeat(new MyClass(), 100));
当然,这不是最好的解决方案...
注意:如果您想要按键的订购集合:
,也可以使用SortedList
而不是Dictionary
SortedList<TKey, TValue>
:代表一个基于关联的IComparer实现的密钥/值对的集合。
如果您需要键/值对,则不能使用列表,则需要一个字典。实现非常活泼,所以不要太害怕性能(只要您不在其中提出太多价值)。
您可以用
迭代它foreach(KeyValuePair<int, string> kvp in dict)
{
}
如果您需要订购,则可以使用列表:
List<int> ordered = new List(dict.Keys);
ordered.Sort();
foreach(int key in ordered)
{
}