Как выполнить итерацию для большего списка, используя foreach

1

У меня есть два списка, список1 элементов размера 5 и список2 элементов размера 6. Я хочу итерации для большего размера списка (например, 6 в этом случае), используя foreach, но проблема в том, что я не использую условие, чтобы проверить, какой список больше. Итак, как я могу выполнить необходимую задачу.

if (list1.Count>list2.Count) // here I donot want to use if statement
{                            // do it in 1 statement only
    Size=list1.Count;
    foreach (var item in list1)
    {
        // do something
    }
}
else 
{
    Size = list2.Count;
    foreach (var item in list2)
    {
        // do something
    }
}
Теги:
foreach

2 ответа

6
Лучший ответ

Вы можете переместить условие в foreach:

foreach(var item in (list1.Count > list2.Count ? list1 : list2))
{
    // do stuff
}

Если у вас несколько списков (более 2), вы можете создавать коллекцию и получать максимум с помощью LINQ:

var myLists = new List<List<T>>(); // T is the generic type of your Lists, obviously
myLists.Add(list1);
myLists.Add(list2);
...
myLists.Add(listN);

// iterate over the largest one:
foreach (var item in myLists.First(l => l.Count == lists.Max(x=>x.Count)))
{
    // do stuff
}
  • 0
    Извините, я либо не хочу использовать '>? :' слишком.
  • 1
    @ user1909259 Затем используйте < и поменяйте местами список: p
Показать ещё 7 комментариев
4
var list = list1.Count > list2.Count ? list1 : list2;

foreach(var item in  list)
  • 0
    Хотя ответ Рика тоже сработает, мне больше нравится это решение, так как оно более читабельное
  • 0
    Я согласен, что это более читабельно, чем мой ответ, но OP указал, что «делай это только в 1 заявлении». В вашем случае я бы предложил переименовать list в «largeList» или что-то еще для большей ясности.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню