关于C#:从字典中获取第一个元素

本文探讨了在C#中如何从字典中获取第一个元素的不同方法,包括使用LINQ的First()方法、GetEnumerator()方法及FirstOrDefault()方法,并讨论了字典本身没有固有顺序的问题。

关于C#:从字典中获取第一个元素

https://www.codenong.com/13979966/

 

Get first element from a dictionary

我有以下声明:

 

1

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

 

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

 

相关讨论

 


注意,调用First实际上是调用IEnumerable的LINQ扩展,该扩展由Dictionary实现。但对于字典来说,"第一"没有定义的含义。根据这个答案,最后添加的项最终是"第一"(换句话说,它的行为类似于堆栈),但这是特定于实现的,它不是保证的行为。换言之,假设您要先调用任何已定义的项,这将是自找麻烦——使用它应该被视为从字典中获取随机项,正如下面Bobson所指出的那样。但是,有时这很有用,因为您只需要字典中的任何项目。


只需使用Linq First():

 

1
2
3

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

 

注意,在字典上使用First可以得到KeyValuePair,在本例中是KeyValuePair>。


还请注意,通过将First与linq OrderBy结合,您可以从First的使用中获得特定的含义:

 

1

var first = like.OrderBy(kvp => kvp.Key).First();

相关讨论

 


对于任何一个来这里的人来说,他们想要一个无LINQ的方法从字典中获取一个元素。

 

1
2
3
4
5
6
7

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,其中键和值都是null。

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

 

相关讨论

 

 

 


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

 

相关讨论

 


编辑:使用OrderedDictionary。

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

前任:

 

1
2
3

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

相关讨论

 


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

 


1
2

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

相关讨论

 

 

 


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

 

1
2
3
4
5
6
7
8

 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;
 }

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值