我有一组有序的键值对,例如以下条目:
1 "one"
2 "two"
4 "four"
50 "fifty"
我想快速查找(所以给定一个int
键,我想找到该键的值),但理想情况下还可以快速找到字典中的下一个键。当前密钥 - 因此,在给定密钥2
的情况下,找到下一个密钥为4
,然后50
。
我知道一个词典会快速完成第一个词典,而第二个词汇的链接列表也是如此(但是很难在一个特定的键上跳起来#39; )。
我看了一眼here,看起来有些可能是有序的字典吗?我想知道C#中是否有一个好的数据结构来完成这两件事(按键查找并移动到下一个键)?
我不需要非常大的项目数量(可能是数千个),但如果可能的话,我想进行大量的查找并快速在密钥之间向前移动(无需检查项目5) ,6,7 ...出现在字典中。
答案 0 :(得分:1)
您正在寻找的是System.Collections.Specialized
中的OrderedDictionary
在这个集合中你可以获得Key,并且你可以在下一个索引处获取项目已经找到了,但是微软开箱即用的实现工作没有成功,因为它缺少所有你需要的方法。 TryGetValue或IndexOf。
看看那些页面:
答案 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]);