cdu*_*dub 44 .net c# asp.net .net-3.5
我有以下声明:
Dictionary<string, Dictionary<string, string>> like = new Dictionary<string, Dictionary<string, string>>();
Run Code Online (Sandbox Code Playgroud)
我需要获取第一个元素,但不知道键或值.最好的方法是什么?
McG*_*gle 95
注意,在First这里调用实际上是调用IEnumerable的Linq扩展,它由Dictionary<TKey,TValue>.实现.但对于词典,"第一"没有明确的含义.根据这个答案,最后添加的项目最终是"First"(换句话说,它的行为类似于Stack),但这是特定于实现的,它不是保证的行为.换句话说,假设你将通过调用获得任何定义的项目First将是乞求麻烦 - 使用它应被视为类似于从字典中获取随机项目,如下面的Bobson所述.但是,有时候这很有用,因为你只需要字典中的任何项目.
只需使用Linq First():
var first = like.First();
string key = first.Key;
Dictionary<string,string> val = first.Value;
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下,在First字典上使用会给出一个.KeyValuePairKeyValuePair<string, Dictionary<string,string>>
另请注意,您可以First通过将其与Linq结合使用来获得特定含义OrderBy:
var first = like.OrderBy(kvp => kvp.Key).First();
Run Code Online (Sandbox Code Playgroud)
Jes*_*ing 22
对于任何人来此想要一个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"
Run Code Online (Sandbox Code Playgroud)
我不确定这是否是特定于实现的,但如果您的Dictionary没有任何元素,Current则将包含KeyValuePair<string, string>键和值都在的位置null.
(我查看了linq的First方法背后的逻辑,并通过测试LinqPad 4)
编辑:使用 OrderedDictionary。
最好用于FirstOrDefault()检索第一个值。
前任:
var firstElement = like.FirstOrDefault();
string firstElementKey = firstElement.Key;
Dictinary<string,string> firstElementValue = firstElement.Value;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
126792 次 |
| 最近记录: |