我有一个名为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。
有什么想法吗?
答案 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());