对于索引不连续(但仅按升序添加)的数组,我将在 C# 中使用哪种集合类型,并且我需要按索引和按位置访问(例如“连续索引”)?
例如,如果我添加索引为 2、4 和 7 的对象 A、B 和 C,我需要按索引 (2/4/7) 或按位置访问 (1/2/3 或 0/1/2 两者工作)。
对于索引不连续(但仅按升序添加)的数组,我将在 C# 中使用哪种集合类型,并且我需要按索引和按位置访问(例如“连续索引”)?
例如,如果我添加索引为 2、4 和 7 的对象 A、B 和 C,我需要按索引 (2/4/7) 或按位置访问 (1/2/3 或 0/1/2 两者工作)。
您应该使用 aDictionary
来存储对象以供其索引访问,但您还需要某种方式List
来存储“地点”,因为Dictionary
不存储地点。在您自己的班级中将它们一起加入,并将添加作为一个操作处理,以确保它们同步。
如果您只想使用一个,您可以使用List
and 循环来查找密钥,但这将花费线性 O(N) 时间。
编辑
正如 Matthew Strawbridge 指出的那样,该BinarySearch
方法将在 O(log N) 中找到元素,因此您可以跳过使用字典。
使用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);