[英]compare a element and next element in a list, if they are same then add corresponding index elements value in second list
有两个列表。 第一个列表包含元素 1,1,0,0,0,1,第二个列表包含元素 200,300,100,200,100,350。 我必须将 index 处的 list1 元素与下一个索引元素进行比较。 如果它们相同,则在列表 2 中添加相同索引处的元素并保存在其他列表中。
input list1 -> 1,1,0,0,0,1
input list2 -> 200,300,100,200,100,350
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<int> signalTrans = new List<int>();
List<double> time = new List<double>();
List<double> timeSorted = new List<double>();
List<int> signalTransSorted = new List<int>();
signalTrans.Add(1);
signalTrans.Add(1);
signalTrans.Add(0);
signalTrans.Add(0);
signalTrans.Add(0);
signalTrans.Add(1);
time.Add(200);
time.Add(300);
time.Add(100);
time.Add(200);
time.Add(100);
time.Add(350);
int i;
double k;
for (i = 0; i < signalTrans.Count(); i++)
{
if ((i + 1) < signalTrans.Count())
{
if (signalTrans[i + 1] == signalTrans[i])
{
k = time[i + 1] + time[i];
signalTransSorted.Add(signalTrans[i]);
timeSorted.Add(k);
}
else
{
continue;
}
}
}
}
}
}
output list1 -> 1,0,1
output list2 -> 500,400,350
如果您愿意使用MoreLinq ,我建议您从:
var result = signalTrans.Zip(time, (signalEntry, timeEntry) => new { signalEntry, timeEntry })
.GroupAdjacent(z => z.signalEntry)
.Select(z => new { signal = z.Key, totalTime = z.Sum(y => y.timeEntry) });
var indexes = result.Select(z => z.signal).ToList();
var totalTimes = result.Select(z => z.totalTime).ToList();
Zip
用于将两个列表压缩在一起 - 因此您有一个匿名类型的IEnumerable
,其中包含来自两个列表的数据。 GroupAdjacent
然后将来自signalTrans
相邻条目组合在一起。 Sum
然后将time
条目相加。
这会导致您在问题中指定的输出:
输出列表 1 -> 1,0,1
输出列表 2 -> 500,400,350
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.