c#-从字典中获取第一个元素

我有以下声明:

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

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

cdub asked 2020-07-30T15:30:54Z
7个解决方案
94 votes

请注意,实际上,这里要调用29894543830349260260是要调用IEnumerable的Linq扩展,该扩展由OrderBy实现。但是对于字典,“ first”没有定义的含义。 根据这个答案,最后添加的项最终是“ First”(换句话说,它的行为就像一个Stack),但这是特定于实现的,不是保证的行为。 换句话说,假设您要通过调用First来获取任何已定义的项目,那会带来麻烦–使用它应被视为类似于从Dictionary中获取随机项目,正如下面的Bobson所述。 但是,有时这很有用,因为您只需要字典中的任何项目即可。


只需使用Linq First

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

请注意,在字典上使用First可获得OrderBy,在这种情况下为KeyValuePair<string, Dictionary<string,string>>


还要注意,通过将其与Linq 29894543830349260260结合使用,您可以从使用First产生特定含义:

var first = like.OrderBy(kvp => kvp.Key).First();
McGarnagle answered 2020-07-30T15:31:26Z
22 votes

对于任何想要这种无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"

我不确定这是否是特定于实现的,但是如果您的字典中没有任何元素,则First将包含LinqPad 4,其中键和值均为null

(我研究了linq的First方法背后的逻辑,并通过LinqPad 4对其进行了测试)

JesseBuesking answered 2020-07-30T15:31:55Z
15 votes

尽管您可以使用First(),但词典本身没有顺序。 请改用OrderedDictionary。 然后,您可以执行FirstOrDefault。这种方式将很有意义。

RAS answered 2020-07-30T15:32:15Z
4 votes

编辑:使用OrderedDictionary。

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

例如:

var firstElement = like.FirstOrDefault();
string firstElementKey = firstElement.Key;
Dictinary<string,string> firstElementValue = firstElement.Value;
naren.katneni answered 2020-07-30T15:32:44Z
2 votes

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

Alexei Levenkov answered 2020-07-30T15:33:05Z
0 votes
Dictionary<string, Dictionary<string, string>> like = new Dictionary<string, Dictionary<string, string>>();
Dictionary<string, string> first = like.Values.First();
Agustin Meriles answered 2020-07-30T15:33:22Z
0 votes

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

 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;
 }
Levris First answered 2020-07-30T15:33:43Z
translate from https://stackoverflow.com:/questions/13979966/get-first-element-from-a-dictionary