我需要的是类似于数组的东西,但让我随时为索引分配一个元素,并检查是否已经为特定索引分配了一个值,如
MyArray<string> a = new MyArray<string>();
a[10] = "ten";
bool isTheFifthElementDefined = a[5] != null; // false
也许Dictionary<int, string>
使用ContainsKey
方法可以做,但如果我只想要一个带有数字键的有序集合,那么是不是有更合适的数据结构?
我还需要遍历已定义的元素(最好使用foreach或linq)访问当前元素的值和键。
答案 0 :(得分:2)
正如您所提到的,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));
custom type
:
List<MyClass> myList = new List<MyClass>(Enumerable.Repeat(new MyClass(), 100));
Ofcourse这不是最好的解决方案......
注意:如果您想按键排序,也可以使用SortedList
代替Dictionary
:
SortedList<TKey, TValue>
:表示根据关联的IComparer实现按键排序的键/值对的集合。
答案 1 :(得分:1)
如果您需要键/值对,则无法使用列表,您需要一个词典。 实现非常活泼,所以不要太害怕性能(只要你没有在其中放入过多的值)。
您可以使用
进行迭代foreach(KeyValuePair<int, string> kvp in dict)
{
}
如果您需要订购,可以使用清单:
List<int> ordered = new List(dict.Keys);
ordered.Sort();
foreach(int key in ordered)
{
}