在C#中,哪些集合类型可以用于索引不连续(但只按升序添加)的数组,并且我需要按索引和按位置访问(例如“连续索引”)?例如,如果我添加索引2,4和7的对象A,B和C,我需要通过索引(2/4/7)或地点(1/2/3或0/1/2都有效)。非连续编号的数组.NET
回答
您应该使用Dictionary
存储对象通过其索引访问,但你也需要某种List
到“地方”存储为Dictionary
没有按” t存储地点。将这些一起加入到你自己的课堂中,并将其作为一项操作进行处理,以确保它们同步。
如果您只想使用一个,您可以使用List
并循环查找密钥,但它会花费线性O(N)时间。
编辑
马修Strawbridge指出,BinarySearch
方法会发现在O(日志N)的元素,所以你可以跳过使用字典。
即使只使用一个'List'对,因为它已经排序了,你可以使用['List
谢谢,添加到答案。 – Joe 2013-02-17 21:17:16
使用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);
我不确定插入的顺序是保证与***字典
插入顺序当然不能保证。 ElementAt是一种适用于任何IEnumerable的破解。红旗本身。 – usr 2013-02-17 20:30:51
它仍然是最可行的选项,不包括IEnumerable子类。 – 2013-02-17 20:32:01
- 1. 连续的分组编号在数组
- 2. 非连续序列号
- 3. 如何编码为JSON编码数组从非连续阵列
- 4. URL的连续编号
- 5. data.frame段的连续编号
- 6. SQL - SQLite的计数连续编号
- 7. 非连续计数
- 8. 对数据集分组连续编号中的JasperReports(iReport的)
- 9. 共享非连续访问Numpy数组
- 10. 连续自动编号
- 11. 怎么算连续编号
- 12. 打印连续编号
- 13. 连续参考编号
- 14. PostgreSQL unnest()使用连续整数编号
- 15. 用连续编号填充非空单元格列VBA
- 16. 连续计数非空值
- 17. 非连续盘中指数
- 18. 更新连续编号的SQL
- 19. 访问编号为连续的
- 20. 检查连续编号的属性
- 21. 结合连续编号为范围的元组
- 22. 查找数组中的非连续数字对
- 23. 使用非连续数字的F#数组初始化
- 24. 数组中连续的偶数和连续的奇数
- 25. 连续1的计数组
- 26. 非连续UISlider iOS
- 27. 非连续滑块
- 28. 非连续范围
- 29. 有没有什么好方法可以将非连续数组作为连续的1D数组?
- 30. Laravel:曲目编号OS连续登录
A,B和C或2,4和7是唯一的吗? – 2013-02-17 20:21:14
将关键字查找字典和订单列表绑定在一起可能是您最好的选择。我认为你可以用k-d树来做这件事,尽管我对它们的了解不多,而且我认为这样做有点矫枉过正。可能如果你想贬低和肮脏,可以通过重新实现Dictionary类的一些部分来提高效率,但我认为这是一个坏主意。 – DarkOtter 2013-02-17 20:44:33
@TimSchmelter在我目前的情况下,他们是独一无二的 – baruch 2013-02-17 20:55:09