我会在C#中使用哪种集合类型,其中索引是非连续的(但只是按升序添加),我需要按索引和按位置访问(例如“连续索引”)?< / p>
例如,如果我添加索引为2,4和7的对象A,B和C,我需要按索引(2/4/7)或按地点(1/2/3或0/1)访问/ 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);