我找到了 OrderedDictionary
,但它并没有完全符合我的要求。 OrderedDictionary
似乎显示数据的字典或 ListView ,但您不能很好地在它们之间进行交叉。
例如
OrderedDictionary mylist = new OrderedDictionary();
mylist.Add(1, "Hello");
mylist.Add(4, "World");
mylist.Add(7, "Foo");
mylist.Add(9, "Bar");
使用这段代码,我可以直接访问 mylist[7]
并获取 "Foo"
,或者我可以按正确的顺序遍历内容,但我可以' 快速回答“列表中 Foo 后面是什么?”的问题
我想要的是这样的:
mylist.GetNode(7).Next.Value => "Bar"
.NET 和 C# 中是否有任何可用的东西可以执行此任务?
最佳答案
使用SortedList
类(是的,我们必须击败那个叫SortedList
这个名字的家伙)。
static class SortedListExtensions
{
public static TValue GetNextValueOrDefault<TKey, TValue>(this SortedList<TKey, TValue> list, TKey key)
{
var indexOfKey = list.IndexOfKey(key);
if (indexOfKey == -1)
return default(TValue);
if (++indexOfKey == list.Count)
return default(TValue);
return list.Values[indexOfKey];
}
}
var myList = new SortedList<int, string>
{
{ 1, "Hello" },
{ 4, "World" },
{ 7, "Foo" },
{ 9, "Bar" },
};
Console.WriteLine(myList.GetNextValueOrDefault(7)); // "Bar"
Console.WriteLine(myList.GetNextValueOrDefault(9)); // null
关于c# - 有什么东西可以在 C# 中实现快速随机访问列表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12371031/