2017-02-04 357 views
1

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

+5

词典没有为其元素定义任何顺序。恳求[编辑]这篇文章来澄清你的实际目标是什么,并显示所需的输出样本。 –

+0

您可以参考http:// stackoverflow。com/questions/1600606/how-the-dictionary-is-internal-maintained这个问题知道Dictionary是如何在内部定义的。如果你提到你的目标,可能会有其他解决方案。词典不打算有任何顺序。 – Vijay

+0

[KeyedCollection ](https://msdn.microsoft.com/en-us/library/ms132438(v = vs.110).aspx)可能会做你想做的。 – Joe

回答

1

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

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" }; 

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

+0

我的代码的列表部分出现错误。我只是纠正它。请看看它。 –

+0

该问题的替代解决方案。好建议 – Everyone

+1

@AmmarSalman谢谢 –

0

你不能指定它是如何存储在字典中的。它是一个散列表,下面是散列表,它基于散列表。

你能让你的问题更清楚吗?如果你更关心在哪里存储元素,你可以使用Arrays(如果你不担心键)。

2

显然你不知道Dictionary是如何工作的。 字典基于具有多个索引的散列函数。基于该键,该值被放置在词典的某处。

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

[0] - > “元素1”

[1] - >

[2] - >

[3] - > “element2的”, “元素5”

[4] - > “元素3”

[5] - > “element4”

因此,基于此,在“last”元素之前存储某些内容是没有意义的。没有“最后”元素。在该示例中,element5存储在element4之前,这恰好是由于Dictionary使用的散列函数。如果你遍历字典,你会得到不同于你所做的插入顺序的结果。

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

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