非连续编号数组.NET

本文关键字:NET 数组 编号 连续 | 更新日期: 2023-09-27 17:59:52

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

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

非连续编号数组.NET

您应该使用Dictionary来存储对象,以便通过其索引进行访问,但您也需要某种List来存储"位置",因为Dictionary不存储位置。在您自己的类中将它们连接在一起,并将添加作为一个操作来处理,以确保它们是同步的。

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

编辑

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

使用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);