从字典中获取第一个元素

时间:2012-12-20 20:27:19

标签: c# asp.net .net .net-3.5

我有以下声明:

Dictionary<string, Dictionary<string, string>> like = new Dictionary<string, Dictionary<string, string>>();

我需要获取第一个元素,但不知道键或值。最好的方法是什么?

8 个答案:

答案 0 :(得分:86)

请注意,在这里调用First实际上是调用IEnumerable的Linq扩展,由Dictionary<TKey,TValue>实现。但对于词典,“第一”没有明确的含义。根据{{​​3}},最后添加的项目最终是“First”(换句话说,它的行为类似于 Stack ),但这是特定于实现的,它不是保证行为。换句话说,要假设你将通过调用获得任何已定义的项目将乞求麻烦 - 使用它应该被视为类似于获得一个来自字典的随机项,如下面的Bobson所述。但是,有时这很有用,因为您只需要从词典中任何项目。


只需使用Linq First()

var first = like.First();
string key = first.Key;
Dictionary<string,string> val = first.Value;

请注意,在字典上使用First会为您提供KeyValuePair,在这种情况下为KeyValuePair<string, Dictionary<string,string>>


另请注意,通过将First与Linq OrderBy相结合,使用var first = like.OrderBy(kvp => kvp.Key).First(); 来获得特定含义:

{{1}}

答案 1 :(得分:18)

对于任何想要使用无linq方法从字典中获取 元素的人来说

var d = new Dictionary<string, string>();
d.Add("a", "b");
var e = d.GetEnumerator();
e.MoveNext();
var anElement = e.Current;
// anElement/e.Current is a KeyValuePair<string,string>
// where Key = "a", Value = "b"

我不确定这是否是特定于实现的,但如果您的词典没有任何元素,Current将包含KeyValuePair<string, string>,其中键和值均为null

(我查看了linq的First方法背后的逻辑,并通过LinqPad 4进行了测试)

答案 2 :(得分:14)

虽然您可以使用First(),但字典本身没有订单。请改用OrderedDictionary。然后你可以做FirstOrDefault。这样就有意义了。

答案 3 :(得分:4)

编辑: 使用OrderedDictionary。

最好使用FirstOrDefault()来检索第一个值。

例如:

var firstElement = like.FirstOrDefault();
string firstElementKey = firstElement.Key;
Dictinary<string,string> firstElementValue = firstElement.Value;

答案 4 :(得分:2)

词典没有定义项目的顺序。如果您只需要一个项目,请使用字典的KeysValues属性来选择一个。

答案 5 :(得分:0)

Dictionary<string, Dictionary<string, string>> like = new Dictionary<string, Dictionary<string, string>>();
Dictionary<string, string> first = like.Values.First();

答案 6 :(得分:0)

在字典中找到第一个元素的简单方法:)

 Dictionary<string, Dictionary<string, string>> like = 
 newDictionary<string,Dictionary<string, string>>();

 foreach(KeyValuePair<string, Dictionary<string, string>> _element in like)
 {
   Console.WriteLine(_element.Key); // or do something
   break;
 }

答案 7 :(得分:0)

转换为数组

var array = like.ToArray();
var first = array[0];