非连续编号数组.NET
本文关键字:NET 数组 编号 连续 | 更新日期: 2023-09-27 17:59:52
对于索引不连续(但仅按升序添加)并且需要按索引和位置访问(例如"连续索引")的数组,我在C#中会使用什么集合类型?
例如,如果我添加索引为2、4和7的对象A、B和C,我需要按索引(2/4/7)或按位置(1/2/3或0/1/2都有效)进行访问。
您应该使用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);