如何获取列表集合的增量

时间:2014-10-27 12:43:34

标签: c# collections

我有一个清单。

  

1 2 3 4 5 6 7

我希望返回连续元素之间的差异列表(增量)。

  

1 1 1 1 1 1

我该怎么做?

我确信必须有一种简单的“收藏”方式 - 但我找不到它。

2 个答案:

答案 0 :(得分:7)

您可以使用Enumerable.Skip以及投射索引的Enumerable.Select重载:

List<int> deltaList = list.Skip(1)             // skip first, irrelevant
    .Select((num, index) => num - list[index]) // index 0 is second number in list
    .ToList();

诀窍是Skip(1)不仅会跳过第一个数字(需要),还会更改Select中的索引。第一个数字index将为0,但它将引用列表中的第二个数字(由于Skip(1))。因此,num - list[index]会使用之前的数字减去当前的电流。

答案 1 :(得分:5)

var result = list.Zip(list.Skip(1), (x, y) => y - x);