1

对于索引不连续(但仅按升序添加)的数组,我将在 C# 中使用哪种集合类型,并且我需要按索引和按位置访问(例如“连续索引”)?

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

4

2 回答 2

2

您应该使用 aDictionary来存储对象以供其索引访问,但您还需要某种方式List来存储“地点”,因为Dictionary不存储地点。在您自己的班级中将它们一起加入,并将添加作为一个操作处理,以确保它们同步。

如果您只想使用一个,您可以使用Listand 循环来查找密钥,但这将花费线性 O(N) 时间。

编辑

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

于 2013-02-17T20:31:44.727 回答
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);
于 2013-02-17T20:26:14.470 回答