c# - 如何在字典的第一个索引中插入元素?

标签 c# .net dictionary

是否有一种方法或技术可以让您将元素插入到 Dictionary<TKey, TValue>保证该项目位于该字典的 KeyCollection 的第一个索引中。

例如:

Dictionary<String, String> dic = foo.GetOutput(); 

// `dic` is something like:

// {"foo", "baa"},
// {"a", "b"}

我需要这样的东西:

dic.Add("key", "value", 0);
// where `0` is the index that `key` to be inserted.

foreach(KeyValuePair<String, String> key in dic) 
{
     Console.WriteLine("{0} = {1}", key.Key, key.Value);
}

输出:

key = value
foo = baa
a = b

最佳答案

不使用字典。

Dictionary<TKey, TValue>被实现为哈希表。字典内部键的位置取决于散列码、进一步减少散列码以提供其内部结构索引的方式,以及以完全依赖于实现的方式插入的顺序。

这不是实现字典的唯一方法。 SortedDictionary<TKey, TValue>在内部使用树结构,因此始终保持键的顺序。在这种情况下,我们仍然不能在开头插入一些东西,而是我们插入一些东西并将其放在适当的位置。

如果您最关心的是排序,那么您根本不需要纯词典。相反,您想要 List<KeyValuePair<TKey, TValue>>或者你想要一个同时提供列表和字典功能的结构,它由 OrderedDictionary 提供。 .这不是泛型,但您可以轻松地围绕它创建一个泛型包装器(不提供内部使用泛型的性能优势,但在使用中提供类型安全)。

关于c# - 如何在字典的第一个索引中插入元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8761109/

相关文章:

javascript - ASP.NET 隐藏字段不发布

c# - 使用 C# 设置 Blob 的到期日期或在 Azure 存储中 X 天后自动删除 Blob?

c# - 如何防止在 ASP.Net Web Forms (Identity) 中注册后自动登录?

c# - 强制 log4net 日志级别

dictionary - 在编译时从其他包扩展 map

javascript - 如何在 JavaScript 中进行关联数组/散列

c# - 如何正确将 JSON 写入事件中心

c# - 使用特定的重载而不进行强制转换?

c# - 我如何在这样的设置中使用 IoC?有没有更好的方法来测试这个?

ios - 删除 Firebase 中的字典元素