2012-03-29 29 views
2

我有以下词典内容:没有获得直接的foreach字典<int, object>第一关键在C#

[0] {75, SimpleObject} 
[1] {56, SimpleObject} 
[2] {65, SimpleObject} 
[3] {12, SimpleObject} 
... 

我想第一个关键,意味着75,没有的foreach。

也许key字应reffers [0]不75.

因为基于该键,我想使用SimpleObject,我写道:

SimpleObject s = dictionary[0] as SimpleObject; 

但VS2010抛出一个异常:

The given key was not present in the dictionary. 

我知道[0]意味着关键数字从0字典,也就是说,如果我能有

[0] {72, SimpleObject} //here 
[1] {56, SimpleObject} 
[2] {65, SimpleObject} 
[3] {12, SimpleObject} 
... 

然后我应该得到记者SimpleObject

对不起,是第一次使用词典,我想了解更多。

问题:如何获得编号75和他的SimpleObject?

谢谢。 PS:我知道在StackOverflow中已经存在类似的主题,但没有一个能够帮助我获得该密钥。

+7

的运行之间的一致的结果,你知道,字典是无序的,它是完全不确定的哪一个对象,你会得到什么? – delnan 2012-03-29 15:06:54

+0

我建议您使用yourDictionary.OrderBy(c => c.key).FirstOrDefault()如果您的字典中需要特定顺序 – Mathieu 2012-03-29 15:10:21

回答

9
using System.Linq; 

... 

dictionary.First().Key // Returns 75 
dictionary.First().Value // returns the related SimpleObject 
+2

没有问题。但请记住其他人对哈希表的无序性质的看法。 – 2012-03-29 15:10:00

+4

在字典中使用'First'是非常没用的,它不会给你一个可预测的结果。 – Guffa 2012-03-29 15:17:48

+2

不一定。有时你不关心你得到的是哪一个对象,你只需要一个对象 - 任何都可以。 – 2012-03-29 15:21:47

0

您可以使用

dictionary.First(); 
1

一个Dictionary是一个(键,值)对不明确的排序结构。也许你正在寻找的将是有用的SortedDictionary,但它与常规Dictionary没有意义。

0

75是关键值而不是索引:

SimpleObject s = dictionary[75] as SimpleObject; 

一个Dictionary<T,U>是无序的,所以你不应该依赖它包含的键值对的顺序。

+0

我想要一些通用的东西,我使用动态内容。 – 2012-03-29 15:10:21

+0

然后使用'SortedDictionary'或任何其他有序的集合 - 依赖于常规字典中元素的顺序将在稍后咬你。 – BrokenGlass 2012-03-29 15:11:12

0

字典不是有序集合,它没有任何索引。

使用键访问项目:

SimpleObject s = dictionary[75]; 
+0

内容可能会改变,因此'[75]'不是解决方案。 – 2012-03-29 15:09:51

+1

@MichaelSwan:如果你不想通过键访问该项目,那么你不能做你所要求的。字典没有排序,所以没有“第一个”项目。也许你应该使用'SortedDictionary'或者'List >'来代替。 – Guffa 2012-03-29 15:15:56

+0

好的,我将使用SortedDictionary,感谢您的建议:) – 2012-03-29 15:18:41

5

这并不是说Dictionary<TKey, TValue>是一个无序的集合,因此它没有第一个或最后的概念。所呈现的项目的顺序基本上是随机的。你不能依靠它在你的应用程序的实例之间是相同的。

如果你确实想要一些命令,那么你应该使用SortedDictionary<TKey, TValue>来代替。这些项目呈现的有一个有序的方式这样做会给你你的应用程序

// Consistent output is produced below 
var dictionary = new SortedDictionary<int, SimpleObject>(); 
var pair = dictionary.First(); 
Console.WriteLine("{0} -> {1}", pair.Key, pair.Value);