使用.ToDictionary()

Tot*_*oto 45 c# generics

我有一个返回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)


Jus*_*ner 8

常规Dictonary未排序,但您可以使用SortedDictonary:

var sortedDict = new SortedDictionary<string, int>(
    GetSomeStrings().ToDictionary(x => x, y => y.Number('A')));
Run Code Online (Sandbox Code Playgroud)

该语句应该为您提供按字符串键排序的SortedDictionary.


Joh*_*her 5

要构建您的字典,您可以这样做:

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)


Dar*_*elk 5

如果我正确理解了问题,这是我的解决方案:

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)