search
menu
person

19:46
Увеличение массива C#

Возможность динамически менять заданный массив в C# отсутствует. Речь идет о массивах типа:

T [ ] = new T [ n ];

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

  1. Создаем функцию, которая будет принимать:
    • массив нужной вам размерности (одномерный, двумерный и т.д.)
    • целочисленные значения (на сколько расширить массив)
  2. В функции выделяем память для нового массива, размерность которого будет равна сумме размерности старого массива с целыми значениями на которые надо этот массив увеличить
  3. Переписываем все данные из старого массива в новый
  4. Возвращаем новый массив пользователю.
Вот и весь алгоритм. А теперь с кодом. 
Я создам статичный метод в отдельном файле, который впоследствии буду использовать во всех своих проектах.
  1. public static T[ ] ExpendArray<T>( T[ ] basicArray, int value = 1 ) {
  2.             if ( value < 1 ) {
  3.                 Debug.LogError( "Для увеличения массива надо указать целочисленное значение больше 0" );
  4.                 return basicArray;
  5.             }
  6.             T[ ] expendedArray = new T[ basicArray.Length + value ];
  7.             for ( int i = 0; i < basicArray.Length; i++ ) {
  8.                 expendedArray[ i ] = basicArray[ i ];
  9.             }
  10.             return expendedArray;
  11.         }

А теперь к разбору.
1-я строка.

  • Указываем модификатор доступа "public", чтобы иметь возможность вызывать метод из любой части программы.
  • Для чего используется модификатор "static" напишите в комментариях. Я понимаю что он тут нужен, а объяснить не могу.
  • Далее указываем какой тип данных будет возвращать метод. В нашем случае воспользуемся обобщенным типом "T[ ]".
  • Добавляем название метода "ExpendArray" и говорим что метод обобщенный "<T>".
  • И в конце, какие типы данных принимает метод. "T[ ] basicArray" - это массив, который надо расширить, "int value = 1" - указывает насколько надо расширить массив.

Обобщенный тип данных "T[ ]" позволит нам применять данный метод для расширения массивов любого типа данных, например "int[ ]" или "string[ ]".
2-я - 5-я строки.

  • Чтобы массив расширился в правильном направлении, проверяем значение принимаемого целого числа. Оно должно быть не менее 1. Причем, мы заранее указали что значение по умолчанию будет "1" , таким образом при вызове функции, если надо расширить только на 1 ячейку, можно опустить второй аргумент. Пример вызова функции без второго аргумента: "array ExpendArray(array)". Результатом выполнения метода станет массив увеличенный на 1.
  • Если проверка не прошла выводится ошибка в лог и пользователю возвращается исходный массив.
6-я строка.
  • Создаем новый массив и выделяем под него память, при этом длина массива будет равна длине исходного массива плюс значение второго аргумента.
7-я - 9-я строки.
  • Запускаем цикл от нуля до конца исходного массива. Если укажите длину нового массива, то будет ошибка, так как старый массив был короче.
  • Переносим в каждую ячейку нового массива значения из исходного.
10-я строка.
  • Возвращаем пользователю увеличенный массив.
Вот и все.

Для двумерного массива действуем аналогично. Далее код без подробной расшифровки.

public static T[ , ] ExpendArray<T>(T[,] basicArray, int addCol = 0, int addRow = 0) {
            if ( addCol < 1 || addRow < 1 ) {
                Debug.LogError( "Для увеличения массива надо указать целочисленное значение больше или равно 0" );
                return basicArray;
            }
            T[ , ] expendedArray = new T[ basicArray.GetLength( 0 ) + addCol, basicArray.GetLength( 1 ) + addRow ];
            for ( int i = 0; i < basicArray.GetLength( 0 ); i++ ) {
                for ( int j = 0; j < basicArray.GetLength( 1 ); j++ ) {
                    expendedArray[ i, j ] = basicArray[ i, j ];
                }
            }
            return expendedArray;
        }

Категория: Программирование | Просмотров: 132 | Добавил: ARMANI | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]