Мне нравится создавать int[]
с длиной X
и оценивать его с помощью [0,1,2.... X]
например.
public int[] CreateAA(int X){}
int[] AA = CreateAA(9) => [0,1,2,3,4,5,6,7,8,9]
Есть ли простой способ? Или нужно выполнить цикл и значение init
Мне нравится создавать int[]
с длиной X
и оценивать его с помощью [0,1,2.... X]
например.
public int[] CreateAA(int X){}
int[] AA = CreateAA(9) => [0,1,2,3,4,5,6,7,8,9]
Есть ли простой способ? Или нужно выполнить цикл и значение init
Вы можете воспользоваться функциональностью IEnumerable.
int[] arr = Enumerable.Range(0, X+1).ToArray();
Это создаст список IEnumerable для вас, а .ToArray()
удовлетворит вашу потребность в массиве int.
Итак, для X = 9 в вашем случае он будет генерировать массив для [0,1,2,3,4,5,6,7,8,9]
(по мере необходимости)
Использование Enumerable.Range(0, 10).ToArray()
очень кратким, но если вы хотите создать очень большой массив, метод расширения ToArray
должен будет собирать числа в буфер, который нужно перераспределить несколько раз. При каждом перераспределении содержимое буфера копируется в новый более крупный буфер..NET использует стратегию, в которой размер буфера удваивается при каждом перераспределении (и исходный буфер имеет четыре элемента).
Итак, если вы хотите избежать множественного перераспределения буфера, вам нужно создать массив заранее:
int[] aa = new int[10];
for (var i = 0; i < aa.Length; i += 1)
aa[i] = i;
Это самый эффективный способ инициализации массива.
Однако, если вам нужен массив из 100 000 000 последовательных номеров, тогда вы должны посмотреть на дизайн, где вам не нужно хранить все числа в массиве, чтобы избежать влияния требования к памяти. IEnumerable<int>
очень полезен для этой цели, потому что вам не нужно выделять всю последовательность, но может генерировать ее во время итерации, и это именно то, что делает Enumerable.Range
. Поэтому избегать массива последовательных чисел в первую очередь может быть даже лучше, чем думать о том, как его создать.
Зачем создавать функцию, когда она уже существует.
В этом конкретном примере используйте
int[] AA = Enumerable.Range(0, 10).ToArray();
где 0 is the starting value
и 10 (X + 1) is the length of array
Итак, общий, применимый ко всем
int[] AA = Enumerable.Range(0, X + 1).ToArray();
с функцией и циклом:
static int[] f(int X)
{
int[] a = new int[X+1];
for(int i = 0; i < a.Length; i++)
a[i] = i;
return a;
}
Для полноты, вот функция, которая создает массив.
Я сделал это немного более универсальным, имея параметры для значения min и max, т.е. CreateArray(0, 9)
возвращает {0,1,2,3,4,5,6,7,8,9}
.
static int[] CreateArray(int min, int max) {
int[] a = new int[max - min + 1];
for (int i = 0; i < a.Length; i++) {
a[i] = min + i;
}
return a;
}
Для инициализации попробуйте это
int x = 10;
Enumerable.Range(0, x)
.Select((v, i) => v + i).ToArray();