编辑:谢谢杰森,这是一本字典并不重要.我只是希望运行时具有较低的运行时间.LINQ方法快吗?另外,我知道这不是主题,但是n => n是什么意思?
我有一个数字列表,我想制作另一个列表,其中包含最开头和最少的数字.
所以我做的是通过列表并检查数字x是否在字典中.如果不是那么我把关键x和值1.如果是那时我将值更改为值加1.
现在我想订购字典,以便我可以列出一个列表,其中列出的是开头最多,最少的列表.
我怎么能在C#中做到这一点?PS.运行时非常重要.
jas*_*son 11
所以听起来你有一个Dictionary<int, int>键表示你在列表中有一个整数的位置,相应的值表示整数出现的次数的计数.您是说要按频率按降序排序的计数来订购密钥.然后你可以说
// dict is Dictionary<int, int>
var ordered = dict.Keys.OrderByDescending(k => dict[k]).ToList();
Run Code Online (Sandbox Code Playgroud)
现在,听起来你开始使用List<int>哪个是你想要计算的值,并按计数排序.您可以在LINQ中快速执行此操作,如下所示:
// list is IEnumerable<int> (e.g., List<int>)
var ordered = list.GroupBy(n => n)
.OrderByDescending(g => g.Count())
.Select(g => g.Key)
.ToList();
Run Code Online (Sandbox Code Playgroud)
或者在查询语法中
var ordered = (from n in list
group n by n into g
orderby g.Count() descending
select g.Key).ToList();
Run Code Online (Sandbox Code Playgroud)
现在,如果您需要拥有中间字典,您可以说
var dict = list.GroupBy(n => n)
.ToDictionary(g => g.Key, g => g.Count());
var ordered = dict.Keys.OrderByDescending(k => dict[k]).ToList();
Run Code Online (Sandbox Code Playgroud)