【发布时间】:2015-02-11 22:03:24
【问题描述】:
这是我目前所拥有的:
decimal? total = list.Sum(item => item.Score);
我想做的是排除列表中的最小值和最大值,然后得到总值。
是否有可能在一个 linq 语句中完成所有这些操作?
【问题讨论】:
-
你可以试试 list.OrderBy(item => item.Score).Skip(1).Take(list.Count - 2).Sum(item => item.Score);作为参考,我现在讨厌自己,这可能是最未经优化的垃圾。
-
你绝对可以用一个累加器来做到这一点,该累加器对可枚举进行 one 评估。 (我的意思是使用聚合)。
-
你为什么想要一个单一的声明?一个简单的
list.Sum(item => item.Score) - list.Max() - list.Min()不是更具可读性吗?我怀疑三次迭代列表会成为您应用程序的瓶颈。 -
... 请参阅下面我的答案以获得仅使用 O(1) 内存枚举整个 Enumerable 一次的答案。
标签: c# linq list linq-to-objects