Я не уверен, что вы имеете в виду относительно отрицательных бит, но это может сделать то, что вы хотите. Это ужасно, потому что она использует побочные эффекты, но ...
double prev = 0d;
var differences = list.Select(current =>
{
double diff = prev - current;
prev = current;
return Math.Abs(diff);
}).Skip(1);
(первое значение пропускается, поскольку он просто дает разницу между первым первоначальной стоимостью и 0D.)
EDIT: Что может быть немного более приятным был бы метод расширения для проекта, основанный на парах элементов. Это изолирует побочные эффекты в одном месте, что это хорошо:
using System.Collections.Generic;
// This must be a non-nested type, and must be static to allow the extension
// method.
public static class Extensions
{
public static IEnumerable<TResult> SelectPairs<TSource, TResult>
(this IEnumerable<TSource> source,
Func<TSource, TSource, TResult> selector)
{
using (IEnumerator<TSource> iterator = source.GetEnumerator())
{
if (!iterator.MoveNext())
{
yield break;
}
TSource prev = iterator.Current;
while (iterator.MoveNext())
{
TSource current = iterator.Current;
yield return selector(prev, current);
prev = current;
}
}
}
}
Чтобы использовать это в вашем конкретном случае, вы могли бы сделать:
var differences = list.SelectPairs((x, y) => Math.Abs(x-y));
Почему? Зачем это решать с LINQ? Это не похоже на проблему, которая должна быть решена с помощью LINQ. –
Почему 0.53 вместо 0.54 в вашем примере? –