从Dictionary <string,string =“”> </string,>获取第一个键

时间:2009-11-30 15:31:09

标签: c#

我正在使用System.Collections.Generic.Dictionary<string, string>

我想从这本词典中返回第一个键。我尝试了dic.Keys[0],但我对Keys属性(KeyCollection对象)的唯一依据是枚举器。

我是否必须通过所有键进行枚举才能获得第一个?

5 个答案:

答案 0 :(得分:94)

假设您使用的是.NET 3.5:

dic.Keys.First();

请注意,没有保证在字典中迭代键/值对的顺序。您可能会发现,在很多的案例中,您可以获得放入词典的第一个键 - 但您绝对绝不能依赖它。正如Skirwan所说,并没有真正的“第一”概念。基本上上面会给你“字典中的一把钥匙” - 这就是所有保证的。

(如果你不知道字典是否为空,你可以使用FirstOrDefault。)

答案 1 :(得分:23)

'first'的概念并不真正适用于字典,因为条目没有排序;允许任何插入或删除从根本上改变键的顺序。

答案 2 :(得分:13)

首先,不,您不必枚举所有条目 - 只需枚举第一项:

IEnumerator enumerator = dictionary.Keys.GetEnumerator();
enumerator.MoveNext();
object first = enumerator.Current;

理想情况下,人们会检查MoveNext()实际上是否成功(它返回一个bool),否则对Current的调用可能会抛出。

请注意,未指定dicitonary的顺序。这意味着“第一个”项目实际上可能是任何键,在后续调用中可能会有所不同(虽然实际上不会),并且当项目被添加到字典中时会发生变化。

答案 3 :(得分:9)

看起来有点过头了,但是怎么样

foreach (<Type> k in dic.Keys)
    return k;

答案 4 :(得分:1)

我们可以使用linq技术

var key = dic.Take(1).Select(d => d.Key).First()

或者我们可以使用其他搜索

var myList = dic.Take(1).Where(d => d.Key.Contains("Heaven")).ToList();