Наиболее эффективный способ Array.Resize с чем-то, кроме "0" в качестве значения по умолчанию? - PullRequest
0 голосов
/ 09 января 2011

Я хотел бы изменить размер массива, однако я не хочу, чтобы все добавленные значения были равны нулю.

Array.Resize(ref range, range.Length + grow);

Если вы предполагаете, что добавленная длина всегда кратна 4 байтам (достаточно, чтобы удерживать число с плавающей запятой), каков наилучший способ заполнить это значение либо float.MaxValue, либо float.MinValue?

1 Ответ

3 голосов
/ 09 января 2011

Просто переберите добавленные элементы и присвойте им значение. Компилятор выдаст код, который будет выполнять проверку диапазона индексов массива только один раз за пределами цикла, поэтому цикл будет очень эффективным.

int oldSize = range.Length;
Array.Resize(ref range, range.Length + grow);
for (int i = oldSize; i < range.Length; i++) {
  range[i] = float.MinValue;
}

Вы должны знать, что Array.Resize на самом деле не изменяет размер массива, но создает новый массив с желаемым размером и копирует данные из исходного массива. Итак, если вы хотите эффективно изменить размер коллекции, вам не следует использовать массив вообще. В зависимости от ваших потребностей может быть лучше что-то вроде List, List из массивов или LinkedList.

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