Nim*_*oud 3 c# linq extension-methods dictionary
我想只使用前N个列表项并删除其余项.我以为我复制并排序匹配为_listTopN但是当我清除匹配时它也清除了_listTopN
简而言之,如何在无序字典列表中获取最多3个列表项并将它们放回同一个字典?
Dictionary<int, float> matches;
Run Code Online (Sandbox Code Playgroud)
...
if (matches.Count > Settings.requiredMatch)
{
var _listTopN = matches.OrderByDescending(s => s.Value).Take(Settings.requiredMatch);
matches.Clear();
foreach (var p in _listTopN)
matches.Add(p.Key, p.Value);
}
Run Code Online (Sandbox Code Playgroud)
Linq查询被懒惰地评估.您分配的语句_listTopN不执行任何工作,它只准备查询; 只有在开始枚举结果时才会执行此查询.由于matches在开始枚举查询之前清除了,因此源中没有任何内容可以枚举...
如果您希望急切地评估查询,请ToList在最后添加:
var _listTopN = matches.OrderByDescending(s => s.Value)
.Take(Settings.requiredMatch)
.ToList();
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用ToDictionary在单个查询中执行所有工作:
matches = matches.OrderBy(s => s.Value)
.Take(Settings.requiredMatch)
.ToDictionary(s => s.Key, s => s.Value);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
312 次 |
| 最近记录: |