减去列表C#中相邻的两个值

本文关键字:两个 列表 | 更新日期: 2023-09-27 18:20:01

有一个名为cardReaderHistory的列表。它包含一些按顺序排列的时间记录,如下所示,

InTime1
超时1
InTime2
超时2
InTime3
超时3
InTime4
超时4……此外……

我需要的是通过(OutTime1-Intime1)+(OutTime1-Intime1
双重的我怎么能在C#中做到这一点。。。????

 double hr = ((outTime1 - inTime1)+(OutTime2 - Intime2)+...);  

谢谢。。入门较差

减去列表C#中相邻的两个值

您可以根据索引过滤输入序列,然后压缩两个序列:

var inTimes = source.Where((x, index) => index % 2 == 0);
var outTimes = source.Where((x, index) => index % 2 == 1);
var result = inTimes.Zip(outTimes, (inTime, outTime) => outTime - inTime).Sum();

如果你不需要中间值,你也可以这样做:

var result = source.Select((x, index) => (index % 2 == 0) ? -x : x).Sum();

假设您的cardReaderHistory列表是一个双联列表:

List<double> cardReaderHistory = new List<double>(); //fill it somewhere
double result;
for(int i = 0; i < cardReaderHistory.Count(); i++)
{
 if(i%2==0) //If it is equal
  result -= cardReaderHistory[i];
 else //its unequal 
  result += cardReaderHistory[i];
}

你只需循环你的值,并根据其是否偶数进行加法或减法运算。

类似的东西。。。

 List<double> l = new List<double> { 1, 2, 3, 4, 5, 6, 7, 8 };
 double hr = 0;
 for (int i = 0; i < l.Count; i++)
 {
     hr += i%2 == 0 ? -l[i] : l[i];
 }

列表中包含日期时间而不是小时似乎是合理的。目前,其他答案都无法解决这一问题。这是我的看法。

var cardReaderHistory = new List<DateTime> {DateTime.Now.AddMinutes(-120), DateTime.Now.AddMinutes(-100), DateTime.Now.AddMinutes(-20), DateTime.Now};
var hours = cardReaderHistory.Split(2).Select(h => (h.Last() - h.First()).TotalHours).Sum();

Split是的一种扩展方法

static class ExtentionsMethods
{
    public static IEnumerable<IEnumerable<T>> Split<T>(this IEnumerable<T> seq, int size)
    {
        while (seq.Any())
        {
            yield return seq.Take(size);
            seq = seq.Skip(size);
        }
    }
}