Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

Как перебрать массивы массивов через foreach

#c_sharp


Пытаюсь перебрать массивы массивов через foreach: Ошибка

int[][] anArray = {new int[] {123,432}, new int[] {543,542}};
foreach (int i in anArray) //ошибка
    foreach (int j in anArray[i])
        Console.WriteLine(anArray[i][j]);
Console.ReadKey();


Но при переборе через for все хорошо

int[][] anArray = {new int[] {123,432}, new int[] {543,542}};
for (int i = 0; i < anArray.Length; i++)
    for (int j = 0; j < anArray[i].Length; j++)
        Console.WriteLine(anArray[i][j]);
Console.ReadKey();


В чем дело?
    


Ответы

Ответ 1



Замени int на var в foreach. У тебя же массив массивов => там int[]

Ответ 2



Правильно: foreach (int[] arr in anArray) foreach (int x in arr) Console.WriteLine(x); Цикл foreach используется для итерации по коллекции (или последовательности) и на каждом шаге он выдает следующий элемент конкретной коллекции (последовательности). Цикл for же более универсален, на каждой итерации он просто меняет некую переменную (или несколько переменных, или ничего не меняет) по некоторому правилу, а также проверяет некие граничные условия (или ничего не проверяет), у вас, в частности, меняются в циклах for переменные i, j, которые вы используете в качестве индекса массива. У вас массив массивов, поэтому внешний foreach возвращает поочередно все "внутренние" массивы из массива "внешнего".

Ответ 3



Ещё один метод, возможно, вам подойдёт: foreach (int v in anArray.SelectMany(x => x)) Console.WriteLine(v);

Ответ 4



int[][] anArray = {new int[] {123,432}, new int[] {543,542}}; foreach (int[] i in anArray) { // anArray содержит 2мерный массив, значит i должен быть массивом, а не элементом. foreach (int j in i) { Console.WriteLine(j); } }

Комментариев нет:

Отправить комментарий