Подтвердить что ты не робот

Создать С# int [] со значением как 0,1,2,3... length

Мне нравится создавать 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

4b9b3361

Ответ 1

Вы можете воспользоваться функциональностью IEnumerable.

int[] arr = Enumerable.Range(0, X+1).ToArray();

Это создаст список IEnumerable для вас, а .ToArray() удовлетворит вашу потребность в массиве int.

Итак, для X = 9 в вашем случае он будет генерировать массив для [0,1,2,3,4,5,6,7,8,9] (по мере необходимости)

Ответ 2

Использование 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. Поэтому избегать массива последовательных чисел в первую очередь может быть даже лучше, чем думать о том, как его создать.

Ответ 3

Зачем создавать функцию, когда она уже существует.

В этом конкретном примере используйте

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();

Ответ 4

с функцией и циклом:

static int[] f(int X)
{
    int[] a = new int[X+1];
    for(int i = 0; i < a.Length; i++)
        a[i] = i;
    return a;
}

Ответ 5

Для полноты, вот функция, которая создает массив.

Я сделал это немного более универсальным, имея параметры для значения 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;
}

Ответ 6

Для инициализации попробуйте это

int x = 10;
Enumerable.Range(0, x)
          .Select((v, i) => v + i).ToArray();