C # Возврат целочисленных значений из списка и создание списка кортежей с каждым int и индексом, который каждый int имел в первом списке - PullRequest
0 голосов
/ 04 января 2019

У меня есть список int, и я нахожу элементы в списке с помощью FindAll и возвращаю результаты в другом списке.Поскольку во втором списке меньше элементов, индекс элементов может отличаться от индекса первого списка.Итак, я хотел бы иметь простую и быструю систему, чтобы результаты FindAll были связаны с индексом, указанным в первом списке.Я думаю, что список кортежей с двумя int будет идеальным, так как первое int кортежа будет каждым из int второго списка, в то время как второе int кортежа будет индексом, который каждый элемент второго списка имел вПервый списокЯ хотел бы, чтобы кортежи были оригинальными (не ValueTuple)

List<int> list1 = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8 };
List<int> list2 = new List<int>();
List<Tuple<int, int>> list2index = new List<Tuple<int, int>>();


list2 = list1.FindAll(x => x > 3 && x < 7);  // Returns 4 5 6

/*
Now I want to create the list of tuples<int, int> so it should 
return: 

(4, 3)  
(5, 4)
(6, 5)

The first int is the first item of the list2 
and the second int is its index in the list1

How can I create this list of tuples in a fast way?          
*/

Ответы [ 2 ]

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

Я бы скорее предложил вам использовать цикл for вместо linq для производительности:

    for (int i = 0; i < list1.Count; i++)
    {
        int x = list1[i];
        if (x > 3 && x < 7)
            list2index.Add(new Tuple<int, int>(x,i));
    }
0 голосов
/ 04 января 2019

Надеюсь, я правильно понял ваше требование.

list2 = list1.FindAll(x => x > 3 && x < 7); 
list2index = list1.Select((x,index)=> Tuple.Create(x,index)).ToList();

Вы также можете сделать следующее, если ваш List1 изменяется после создания list2 и перед созданием list2index

var list2Index = list2.Select(x=> Tuple.Create(x, list1.IndexOf(x)));

Вывод в любом случаебудет

(4, 3)  
(5, 4)
(6, 5)
...