我有一个List<int>
,我需要所有总计达到一个值的所有第一条记录
List<int> Values= new List{10,30,70,50,60};
和值是100,所以我需要10,30,70的清单,如何用linq来获取它
答案 0 :(得分:4)
如果您坚持使用 Linq ,请尝试TakeWhile
(在item
很小的情况下使用sum
)
List<int> Values = new List<int>() {
10, 30, 70, 50, 60};
int sum = 0;
var result = Values
.TakeWhile(item => (sum += item) <= 100) // or < depending on shall we stop on 100 or not
.ToList();
但是,旧的for
循环看起来更干净(在Linq查询之外没有难看的sum
):
List<int> result = new List<int>();
// or sum < 100
for (int i = 0, sum = 0; i < Values.Count && sum <= 100; sum += Values[i++])
result.Add(Values[i]);