LINQ:根据大小获取子集

时间:2012-01-04 15:31:53

标签: linq linq-to-objects

我有一个名为Item的对象:

public class Item
{
   public Guid Id { get; set; }
   public long Size { get; set; }       
}

List<Item>

我需要的是查询此列表并返回多个行所在的位置 累积大小(项目的大小属性)不超过一定数量(阈值)。

然后我可以处理这些元素,将它们从原始列表中删除并获取下一个元素 具有相同查询的元素,直到处理完所有元素。

示例列表:

Id       Size
----------------
1         10
2         13
3         5
4         30
5         10

假设我所需的阈值最大为25。

查询应返回ID为1&amp;的项目。 2因为它们的累积尺寸不超过 25.然后我删除这两个值。下次查询应返回3&amp; 5。 永远不应该返回Id 4,因为它超过了25。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我认为您需要存储一些运行总和值,但TakeWhile应该完成这项工作 像这样:

var someValues = Enumerable.Range(0, 100);
var runningSum = 0;
var whereSumLessThan100 = someValues.TakeWhile(
    item => { runningSum += item; return runningSum < 100; }).ToList();
foreach(var item in whereSumLessThan100)
    Console.WriteLine(item);
Console.WriteLine("Sum: " + whereSumLessThan100.Sum());