我有一个返回List的方法,让我们调用它GetSomeStrings()
.
我在字符串类上有一个扩展方法,返回字符串中的字符数,例如.myString.Number('A')
.
我想在一行中抓一本字典.字典的条目包含字符串,以及字符串中所选字符的编号.
其实我做了以下事情:
var myDic = GetSomeStrings().ToDictionary(x=>x.Number('A'));
Run Code Online (Sandbox Code Playgroud)
这给了我一本字典<int,string>
; 我希望密钥作为字符串.
之后,我想在int值上订购字典.可以在之前的声明中包含这个吗?
我真的想避免使用集合枚举来从列表中排序或创建字典,这实际上没有麻烦.感谢您的优化帮助!
SLa*_*aks 84
该ToDictionary()
方法有一个重载,需要两个lambda表达式 (nitpick:delegates) ; 一个用于密钥,一个用于值.
例如:
var myDic = GetSomeStrings().ToDictionary(x => x, x => x.Number('A'));
Run Code Online (Sandbox Code Playgroud)
请注意,返回的值GetSomeStrings()
必须是唯一的.
.Net Dictionary<TKey, TValue>
是无序的; 它根本无法排序.
相反,您可以在使用时对字典进行排序,如下所示:
foreach(KeyValuePair<string, int> kvp in dict.OrderBy(kvp => kvp.Value))
Run Code Online (Sandbox Code Playgroud)
常规Dictonary未排序,但您可以使用SortedDictonary:
var sortedDict = new SortedDictionary<string, int>(
GetSomeStrings().ToDictionary(x => x, y => y.Number('A')));
Run Code Online (Sandbox Code Playgroud)
该语句应该为您提供按字符串键排序的SortedDictionary.
要构建您的字典,您可以这样做:
var strings = new[] { "one", "2", "three", "four", "five", "six", "seven", "eight", "nine", "ten" };
var dictionary = strings.GroupBy(x => x.Length.ToString()).ToDictionary(x => x.Key, x => x);
Run Code Online (Sandbox Code Playgroud)
请注意将字符串的长度转换为字符串的“ToString()”用法。
此外,对字典进行排序通常没有意义。您可以对字典的每个键中的项目进行排序,也可以在要遍历它们时对字典的键进行排序。
var sortedKeys = dictionary.Keys.OrderBy(x => x);
var sortedValues = dictionary["1"].OrderBy(x => x);
Run Code Online (Sandbox Code Playgroud)
如果我正确理解了问题,这是我的解决方案:
var myDic = GetSomeStrings()
.Select(x => new KeyValuePair<string, int>(x, x.Number('A')))
.ToDictionary(t => t.Key, t => t.Value);
Run Code Online (Sandbox Code Playgroud)