int列表获取记录达到一定值

时间:2019-03-05 07:33:06

标签: c# .net linq

我有一个List<int>,我需要所有总计达到一个值的所有第一条记录

List<int> Values= new List{10,30,70,50,60}; 和值是100,所以我需要10,30,70的清单,如何用linq来获取它

1 个答案:

答案 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]);