Перебрать записи в массиве неизвестной длины в C#

Один из способов циклического перемещения элементов в массиве состоит в том, чтобы жестко закодировать его длину в программе. В качестве альтернативы вы можете использовать свойство массива Длина, чтобы определить, сколько элементов оно содержит во время выполнения. Затем, если вы позже измените длину массива или если массив создается во время выполнения, вам не нужно обновлять границы цикла.

Когда он запускается, эта программа использует следующий код для циклического прохождения элементов в одномерном массиве и добавления их в строку.

// Список значений одномерного массива.
string[] values1 = { "0", "1", "2", "3", "4" };
string txt = "";
for (int i = 0; i < values1.Length; i++)
{
    txt += " " + values1[i];
}
if (txt.Length > 0) txt = txt.Substring(1);
txtValues1.Text = txt;
txtValues1.Select(0, 0);

Все массивы начинаются с 0 как нижняя граница в C#, поэтому наибольшим индексом в массиве является длина arra минус 1. Этот код делает переменную i loop от 0 до массива Length минус 1. (Все массивы имеют 0 нижних границ, если вы не используете метод CreateInstance класса Array. См. пример Сделать массивы с ненулевыми нижними границами в C# .)

Здесь стоит упомянуть один трюк. Цикл добавляет пробел до каждого элемента в строке, поэтому, когда цикл завершается, перед первым элементом появляется дополнительное пространство (если есть какие-либо элементы), поэтому код удаляет его с помощью Подстрока.

Обратите внимание, что есть более простые способы конкатенации значений в массиве. В этом примере вы можете использовать String.Join ("", values1). В этом примере показано, как вы можете перебирать элементы и делать с ними что-то.

Также обратите внимание, что вы можете использовать цикл foreach для циклического перемещения элементов в массиве, если вам не нужны их индексы.

Для многомерных массивов вы можете использовать методы массива GetLowerBound и GetUpperBound, чтобы определить, сколько элементов имеет массив в каждом измерении. Например, GetUpperBound (1) возвращает наибольшее значение, которое вы можете использовать для второго индекса массива. (Номера индексов также начинаются с 0, поэтому индекс 1 является вторым.)

В этом примере используется следующий код для циклического перемещения элементов в двумерном массиве.

// Перечислим значения двумерного массива.
string[,] values2 =
{ 
    { "(0, 0)", "(0, 1)", "(0, 2)", "(0, 3)", "(0, 4)" },
    { "(1, 0)", "(1, 1)", "(1, 2)", "(1, 3)", "(1, 4)" },
    { "(2, 0)", "(2, 1)", "(2, 2)", "(2, 3)", "(2, 4)" }
};
txt = "";
for (int i = 0; i <= values2.GetUpperBound(0); i++)
{
    string line = "";
    for (int j = 0; j <= values2.GetUpperBound(1); j++)
    {
        line += " " + values2[i, j];
    }
    if (line.Length > 0) line = line.Substring(1);
    txt += Environment.NewLine + line;
}
if (txt.Length > 0) txt = txt.Substring(Environment.NewLine.Length);
txtValues2.Text = txt;
txtValues2.Select(0, 0);

Переменная i пересекает возможные первые индексы массива. Как и раньше, нижняя граница равна 0. Код получает верхнюю оценку массива для первого измерения, вызывая GetUpperBound (0).

Внутри цикла для i код делает цикл переменной j над возможными вторыми индексами массива, начиная от 0 до GetUpperBound (1) .

Обратите внимание, что для условий остановки используются & lt; = вместо & lt;. Это связано с тем, что свойство массива Length возвращает общее количество число , поэтому индекс последнего элемента меньше, чем Length. напротив, метод GetUpperBound возвращает наибольший индекс для измерения, а не только этот индекс.

Обратите внимание, что в этом коде используется предыдущий трюк добавления разделительных символов (пробел или новая строка) перед элементами, поэтому он удаляет разделитель, который предшествует первому элементу, когда это делается.

Источник: http://csharphelper.com/blog/2016/12/loop-over-entries-in-an-array-of-unknown-length-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector