C # аналог многопараметрической итерации в Python? - PullRequest
5 голосов
/ 14 февраля 2011

В Python можно перебирать несколько переменных одновременно, как это:

my_list = [[1, 2, 3], [4, 5, 6]]

for a, b, c in my_list:
    pass

Есть ли аналог C # ближе, чем этот?

List<List<int>> myList = new List<List<int>> {
    new List<int> { 1, 2, 3 },
    new List<int> { 4, 5, 6 }
};

foreach (List<int> subitem in myList) {
    int a = subitem[0];
    int b = subitem[1];
    int c = subitem[2];
    continue;
}

Edit - просто чтобы уточнить, точный код должен был присвоить имя каждому индексу в примере C #.

Ответы [ 4 ]

2 голосов
/ 14 февраля 2011

Не слишком отличается от того, что у вас есть, но как насчет этого?

foreach (var subitem in myList.Select(si => new {a = si[0], b = si[1], c = si[2]})
{
                int a = subitem.a;
                int b = subitem.b;
                int c = subitem.c;
                continue;
}
1 голос
/ 14 февраля 2011

Вы можете попробовать что-то вроде этого:

var myList = new[] {Tuple.Create(1, 2, 3), Tuple.Create(4, 5, 6)};
foreach (var tuple in myList)
{
    //your code
}
0 голосов
/ 14 февраля 2011

Вы можете создать свой метод расширения out, который может использовать лямбда-выражение.

Но в конце это будет что-то вроде:

for (int i = 0; i

Это всего лишь код "сахара", который IMHO не должен использоваться в общем коде.

0 голосов
/ 14 февраля 2011

C # не имеет специальных конструкций для этого, а также для нескольких назначений

a, b = 1, 2

невозможно в c #.

Следует также отметить, что списки списков нестиль c #Как правило, вы создаете класс со свойствами a, b и c и сохраняете их список до конца.

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