从字典中获取第一个元素
我有以下声明:
Dictionary<string, Dictionary> like = new Dictionary<string, Dictionary>();
我需要获取第一个元素,但不知道键或值。 最好的方法是什么?
注意,在这里调用First
实际上是调用IEnumerable的Linq扩展,它由Dictionary
。 但对于词典,“第一”没有明确的含义。 根据这个答案 ,最后添加的项目最终是“First”(换句话说,它的行为类似于Stack ),但这是特定于实现的,它不是保证的行为。 换句话说, 假设你将通过调用获得任何定义的项目First将是乞求麻烦 – 使用它应被视为类似于从字典中获取随机项目,如下面的Bobson所述。 但是,有时候这很有用,因为你只需要字典中的任何项目。
只需使用Linq First()
:
var first = like.First(); string key = first.Key; Dictionary val = first.Value;
请注意,在字典上使用First
会为您提供KeyValuePair
,在本例中为KeyValuePair
。
另请注意,您可以通过将它与Linq OrderBy
结合使用First
来获得特定含义:
var first = like.OrderBy(kvp => kvp.Key).First();
对于任何想要无法使用linq的方式从字典中获取元素的人来说
var d = new Dictionary(); d.Add("a", "b"); var e = d.GetEnumerator(); e.MoveNext(); var anElement = e.Current; // anElement/e.Current is a KeyValuePair // where Key = "a", Value = "b"
我不确定这是否是特定于实现的,但是如果你的Dictionary没有任何元素,则Current
将包含KeyValuePair
,其中key和value都为null
。
(我查看了linq的First
方法背后的逻辑,并通过LinqPad 4
测试了它)
虽然你可以使用First()
,但字典本身没有订单。 请改用OrderedDictionary 。 然后你可以做FirstOrDefault
。 这样它就会有意义。
编辑:使用OrderedDictionary。
最好使用FirstOrDefault()
来检索第一个值。
例如:
var firstElement = like.FirstOrDefault(); string firstElementKey = firstElement.Key; Dictinary firstElementValue = firstElement.Value;
字典不定义项目的顺序。 如果您只需要一个项目,请使用字典的Keys
或Values
属性来选择一个。
Dictionary> like = new Dictionary>(); Dictionary first = like.Values.First();