关于c#:从Dictionary< string,string>获取第一个键


Get first key from Dictionary<string, string>

我用的是System.Collections.Generic.Dictionary

我想返回这本词典的第一个键。我试过dic.Keys[0],但我在Keys的财产(这是KeyCollection的对象)上只有一个枚举器。

我要把所有的钥匙都一一列举出来才能拿到第一把钥匙吗?


假设您使用的是.NET 3.5:

1
dic.Keys.First();

注意,在字典中没有保证的键/值对迭代顺序。你可能会发现,在很多情况下,你会拿出你放在字典里的第一把钥匙——但你绝对不能依赖它。正如斯基尔万所说,实际上没有"第一"的概念。从本质上说,上面的内容会给你"字典里的一把钥匙"——这是所有保证的。

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


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


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

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

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

另外,请注意,未指定dicitonary的顺序。这意味着"第一个"项实际上可能是任何键,在随后的调用中可能不同(尽管实际上不会),并且随着项在字典中的添加和删除而肯定会发生更改。


好像有点过头了,但是怎么样

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

我们可以使用linq技术

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

或者我们可以用另一个搜索

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