一个排序的字典,可以很容易地移动到下一个键

时间:2017-01-04 16:28:10

标签: c# dictionary sorteddictionary

我有一组有序的键值对,例如以下条目:

1 "one"
2 "two"
4 "four"
50 "fifty"

我想快速查找(所以给定一个int键,我想找到该键的值),但理想情况下还可以快速找到字典中的下一个键。当前密钥 - 因此,在给定密钥2的情况下,找到下一个密钥为4,然后50

我知道一个词典会快速完成第一个词典,而第二个词汇的链接列表也是如此(但是很难在一个特定的键上跳起来#39; )。

我看了一眼here,看起来有些可能是有序的字典吗?我想知道C#中是否有一个好的数据结构来完成这两件事(按键查找并移动到下一个键)?

我不需要非常大的项目数量(可能是数千个),但如果可能的话,我想进行大量的查找并快速在密钥之间向前移动(无需检查项目5) ,6,7 ...出现在字典中。

3 个答案:

答案 0 :(得分:1)

您正在寻找的是System.Collections.Specialized

中的OrderedDictionary

在这个集合中你可以获得Key,并且你可以在下一个索引处获取项目已经找到了,但是微软开箱即用的实现工作没有成功,因为它缺少所有你需要的方法。 TryGetValue或IndexOf。

看看那些页面:

MSDN

Custom ordered dictionary

答案 1 :(得分:0)

您可以将信息放入您的值:

select * from customer

cu_id  cu_status
1      O
2      C
3      O

然后获得您的上一个或下一个ID是微不足道的。然后获得下一个或之前的价值是微不足道的。

当然,插入逻辑要求您更新之前的&每次你添加一些东西。

答案 2 :(得分:-1)

SortedList适合于此。

SortedList<int, string> sortedList = new SortedList<int,string>();

sortedList.Add(1, "one");
sortedList.Add(2, "two");
sortedList.Add(4, "four");
sortedList.Add(50, "fifty");

int currentIndex = sortedList.Keys.IndexOf(2);

Console.WriteLine(sortedList.Keys[currentIndex+1]);
Console.WriteLine(sortedList.Values[currentIndex+1]);