非连续编号的数组.NET

时间:2013-02-17 20:18:52

标签: c# .net collections

我会在C#中使用哪种集合类型,其中索引是非连续的(但只是按升序添加),我需要按索引和按位置访问(例如“连续索引”)?< / p>

例如,如果我添加索引为2,4和7的对象A,B和C,我需要按索引(2/4/7)或按地点(1/2/3或0/1)访问/ 2都工作)。

2 个答案:

答案 0 :(得分:2)

您应该使用Dictionary存储对象以供其索引访问,但您还需要某种List来存储“地点”,因为Dictionary不会t商店。将它们连接在您自己的类中,并处理添加为一个操作以确保它们同步。

如果你只想使用一个,你可以使用List并循环查找密钥,但是需要线性O(N)时间。

修改

正如Matthew Strawbridge所指出的,BinarySearch方法将在O(log N)中找到元素,因此您可以跳过使用字典。

答案 1 :(得分:1)

使用Dictionary

using System.Collections.Generic;

Dictionary<int, type> dict = new Dictionary<int, type>();

// Add values:
dict.Add(2, A);
dict.Add(4, B);
dict.Add(7, C);

// by index:
var A = dict[2];
var B = dict[4];
var C = dict[7];

// by place:
var A = dict.ElementAt(0);
var B = dict.ElementAt(1);
var C = dict.ElementAt(2);