Кортеж IEnumerable - PullRequest
       2

Кортеж IEnumerable

0 голосов
/ 22 апреля 2020

Предположим, у меня есть следующий кортеж:

Tuple<IEnumerable<object1>, IEnumerable<object2>> tp;

Если я переберу Item2, как я могу получить соответствующую пару из Item1? Примерно так:

 for (int i = 0; i < tp.Item2.Count(); i++)
 {
    //Is tp.Item1.ElementAt(i) the pair for tp.Item2.ElementAt(i) ? 
 }

РЕДАКТИРОВАТЬ: Предположим, Item1 является IEnumerable, который содержит имена файлов, а Item2 является IEnumerable, который записывает, сколько раз шаблон был найден в имени файла. Таким образом, Item1 всегда будет иметь по крайней мере один элемент, но Item2 может иметь или не иметь никаких элементов. Если у нас есть элементы в Item2, как сопоставить их с Item1?

Ответы [ 2 ]

2 голосов
/ 22 апреля 2020

Вы можете использовать Enumerable.Zip , чтобы сгруппировать элементы в кортеж и затем перечислить по нему:

var pairs = tp.Item2.Zip(tp.Item1, (first, second) => (first, second));
foreach(var (first, second) in pairs)
{
  // Do something
}
0 голосов
/ 22 апреля 2020

Примерно так:

 for (int i = 0; i < tp.Item1.Count(); i++)
 {
    var list2 = tp.Item2.ToList();
    var item2 = list2[i];
 }

, хотя было бы более целесообразно заранее перебрать и перечисляемый список:


 var list2 = tp.Item2.ToList();

 for (int i = 0; i < tp.Item1.Count(); i++)
 {
    var item2 = list2[i];
 }

Вы могли бы сделать это вместо этого;

var items = new List<Tuple<object, object>>();

foreach(var (item1, item2) in items)
{
    // Do something with item1 and item2
}

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