сравнить элемент и следующий элемент в списке, если они совпадают, то добавить соответствующее значение элемента индекса во второй список - PullRequest
0 голосов
/ 23 января 2019

Есть два списка. Один имеет элементы 1,1,0,0,0,1, а второй список - элементы 200,300,100,200,150,350. Я должен сравнить элемент 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

1 Ответ

0 голосов
/ 23 января 2019

Если вы хотите использовать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...