减去列表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)+...);
谢谢。。入门较差
您可以根据索引过滤输入序列,然后压缩两个序列:
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);
}
}
}