【问题标题】:Store Value in Nth position of a dictionary in C# [closed]将值存储在 C# 中字典的第 N 个位置 [关闭]
【发布时间】:2017-02-04 05:25:23
【问题描述】:

我有一个 DICTIONARY<STRING,STRING> 格式的字典,其中包含 5 个元素的值。我需要的输出是,如果我想在字典中存储一个新元素,它将自动存储在最后一个元素之前的位置。我怎样才能做到这一点?

【问题讨论】:

  • 字典没有为其元素定义任何顺序。请edit 发帖澄清您的实际目标并显示具有所需输出的示例。
  • 你可以参考stackoverflow.com/questions/1600606/…这个问题来了解字典内部是如何定义的。如果您提到您的目标,可能会有其他解决方案。字典没有任何顺序。
  • KeyedCollection<TKey,TItem> 可能会做你想做的事。

标签: c# asp.net-mvc dictionary


【解决方案1】:

显然你不知道字典是如何工作的。 字典基于具有多个索引的哈希函数。根据键,值被放置在字典中的某个位置。

例如,5个元素的字典可以是这样的:

[0] -> “元素1”

[1] ->

[2]->

[3]->“元素2”“元素5”

[4] -> “元素3”

[5] -> “元素4”

因此,基于此,在“最后一个”元素之前存储一些东西是没有意义的。没有“最后一个”元素。在示例中,element5 存储在 element4 之前,这恰好是因为 Dictionary 使用了哈希函数。如果您遍历字典,您将得到与插入顺序不同的结果。

编辑:如果我理解正确,您需要一些可以调用instance[key] 的数据结构,同时能够作为列表进行迭代。这样的数据结构不可能存在,因为key 是一个字符串,并且没有办法从字符串键中生成预期的顺序。不管散列函数是什么,它都不起作用。在任何哈希表(或字典)中,如果添加 (key1/value1) 然后 (key2/value2) 您将可能获得相同的元素顺序,除非键 key1 和 key2 哈希相同表条目。

简而言之,您不能仅仅根据字典中项目的存储顺序来构建算法。顺序取决于散列函数和索引表大小。

【讨论】:

    【解决方案2】:

    您可以像这样轻松编辑任何项目:

    Dictionary<string,string> dic = new Dictionary<string,string>();
    dic.Add("a", "A value");
    dic.Add("b", "B value");
    dic["a"] = "new A value";
    

    如果您想使用顺序和索引,请使用 List:

    public class Item
    {
        public string Key;
        public string Value;
    }
    
        List<Item> items = new List<Item>();
    
        items.Add(new Item { Key = "a", Value = "A Value" });
        items.Add(new Item { Key = "b", Value ="B Value" });
    
        items[1] = new Item { Key = "c", Value = "C value" };
    

    当然在这种情况下你可以有重复的键,如果你想避免重复的键,那么你应该自己检查一下。

    【讨论】:

    • 我的代码的列表部分有错误。我刚刚纠正了它。请看一下。
    • 该问题的替代解决方案。好建议
    • @AmmarSalman 谢谢
    【解决方案3】:

    您无法指定它在字典内部的存储方式。它是下面的哈希表,哈希表基于哈希工作。

    你能把你的问题说得更清楚吗?如果您更关心存储元素的位置,可以使用数组(如果您不担心键)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      • 2022-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多