我有一个返回List的方法,我们称之为GetSomeStrings()
。
我在字符串类上有一个扩展方法,返回字符串中的字符数,例如。 myString.Number('A')
。
我想在一行中抓一本字典。字典的条目包含字符串,以及字符串中所选字符的编号。
其实我会做以下事情:
var myDic = GetSomeStrings().ToDictionary(x=>x.Number('A'));
给了我一本字典<int,string>
;我希望密钥作为字符串。
之后,我想在int值上订购字典。可以在前面的陈述中包括这个吗?
我真的想避免使用集合枚举来从列表中排序或创建字典,这实际上没有麻烦。感谢您的优化帮助!
答案 0 :(得分:74)
ToDictionary()
方法有an overload that takes two lambda expressions (nitpick:delegates);一个用于密钥,一个用于值。
例如:
var myDic = GetSomeStrings().ToDictionary(x => x, x => x.Number('A'));
请注意,GetSomeStrings()
返回的值必须是唯一的。
.Net的Dictionary<TKey, TValue>
是无序的;它根本无法排序。
相反,您可以在使用时对字典进行排序,如下所示:
foreach(KeyValuePair<string, int> kvp in dict.OrderBy(kvp => kvp.Value))
答案 1 :(得分:7)
常规字典未排序,但您可以使用SortedDictionary:
var sortedDict = new SortedDictionary<string, int>(
GetSomeStrings().ToDictionary(x => x, y => y.Number('A')));
该语句应该为您提供按字符串键排序的SortedDictionary。
答案 2 :(得分:5)
如果我理解正确的问题,这是我的解决方案:
var myDic = GetSomeStrings()
.Select(x => new KeyValuePair<string, int>(x, x.Number('A')))
.ToDictionary(t => t.Key, t => t.Value);
答案 3 :(得分:2)
要构建字典,您可以这样做:
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);
注意“ToString()”用法将字符串的长度转换为字符串。
此外,排序字典通常没有意义。您可以对字典的每个键中的项进行排序,也可以在要循环时对字典的键进行排序。
var sortedKeys = dictionary.Keys.OrderBy(x => x);
var sortedValues = dictionary["1"].OrderBy(x => x);
答案 4 :(得分:1)
你需要使用ToDictionary的重载,它带有两个函数:
var myDic = GetSomeStrings().ToDictionnary(x => x, x => x.Number('A'));
这两个函数都使用您用于创建字典的对象。第一个产生密钥;第二,价值。
答案 5 :(得分:1)
var myDic = GetSomeStrings()
.ToDictionary(x => x, x => x.Number('A'));
以您想要的方式获取字典。
编辑:添加了排序依据。首先命令字符串,然后将它们放入字典中,如你所愿
Edit2:Slaks是对的。 OrderBy没有效果。再次删除
答案 6 :(得分:0)
var users = this.context.ad_user.ToDictionary(v => v.DistinguishedName,
v => new ad_user
{
DistinguishedName = v.DistinguishedName,
CN = v.CN,
DisplayName = v.DisplayName,
Info = v.Info,
Mail = v.Mail
});