繁体   English   中英

比较列表中的一个元素和下一个元素,如果它们相同,则在第二个列表中添加相应的索引元素值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM