c# - 有什么东西可以在 C# 中实现快速随机访问列表吗?

标签 c# .net list dictionary hashtable

我找到了 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/

相关文章:

c# - 使用 ABP 框架自定义 API 响应 HTTP 状态码

c# - 如何在未安装 Visual Studio 的计算机上安装 Windows 服务?

c# - 如何更新 ObservableCollection 类中的单个项目?

c# - 使用 SMO 更改逻辑数据库名称

c# - SQLServer AlwaysOn 和 .net SqlConnection 重置

c# - 混淆 Winform 及其外部依赖项 (dll)

.net - .NET 和 C++ 应用程序之间的 IPC

java - 从 Object 到 Java 7 的未经检查的转换

python - 如何在 Python 中对股票数据的结构化列表进行排序以便以后访问?

list - 根据匹配的对象属性从列表创建列表