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

Заполнить массив в С#

В Java существует около 18 статических "заполняющих" методов в массиве классов, которые служат для назначения одного значения каждому элементу в массиве. Я ищу эквивалент в С# для достижения того же, но я не нахожу ничего с такой же компактностью:

1) ForEach, поскольку я понимаю, передает элементы в массиве по значению, поэтому я не могу их изменить

2) Repeat from Enumerable создает новый массив, кажется, накладные расходы, чтобы создать новый массив, а затем скопировать каждый элемент из массива

3) for-loop не очень хорош, и я думаю, поэтому люди Java представили эту компактную нотацию, начиная с

4) Метод Clear из класса Array может установить все на ноль, но тогда как преобразовать нуль в ненулевое значение, которое я хочу?

Чтобы продемонстрировать синтаксис Java, рассмотрите этот код, который печатает три раза число 7:

int[] iii = {1, 2, 3};
Arrays.fill(iii, 7);
for (int i : iii) {
    System.out.println(i);
}
4b9b3361

Ответ 1

Напишите себе метод расширения

public static class ArrayExtensions {
    public static void Fill<T>(this T[] originalArray, T with) {
        for(int i = 0; i < originalArray.Length; i++){
            originalArray[i] = with;
        }
    }  
}

и используйте его как

int foo[] = new int[]{0,0,0,0,0};
foo.Fill(13);

заполнит все элементы 13

Ответ 2

int[] arr = Enumerable.Repeat(42, 10000).ToArray();

Я считаю, что это делает работу:)

Ответ 3

Вы можете попробовать что-то вроде этого:

Я инициализировал массив для значения 5, вы можете поместить свой номер аналогичным образом.

int[] arr = new int[10]; // your initial array

arr = arr.Select(i => 5).ToArray(); // array initialized to 5.

Ответ 4

вы можете написать метод расширения

public static void Fill<T>(this T[] array, T value)
{
  for(int i = 0; i < array.Length; i++) 
  {
     array[i] = value;
  }
}

Ответ 5

Предположим, вы хотите заполнить цифрой 13.

int[] myarr = Enumerable.Range(0, 10).Select(n => 13).ToArray();

или

List<int> myarr = Enumerable.Range(0,10).Select(n => 13).ToList();

если вы предпочитаете список.

Ответ 6

public static void Fill<T>(this IList<T> col, T value, int fromIndex, int toIndex)
{
    if (fromIndex > toIndex)
        throw new ArgumentOutOfRangeException("fromIndex");

    for (var i = fromIndex; i <= toIndex; i++)
        col[i] = value;
}

Что-то, что работает для всех IList<T> s.