用C#填充一个数组

本文关键字:一个 数组 填充 | 更新日期: 2023-09-27 18:00:00

在Java中,类Arrays中大约有18个静态"填充"方法,用于为数组中的每个元素分配一个值。我正在C#中寻找一个等价物来实现同样的事情,但我没有找到任何具有相同紧凑性的东西:

1) 据我所知,ForEach按值传递数组中的元素,所以我不能更改它们

2) 从Enumerable重复创建一个新数组,创建一个新数组,然后从数组中复制每个元素似乎是一项开销

3) for循环并不漂亮,我想这就是Java人员从开始引入这种紧凑表示法的原因

4) Array类中的Clear方法可以将所有内容设置为零,但如何将零转换为所需的非零值?

为了演示Java的语法,请考虑以下代码,该代码打印三倍于数字7:

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

用C#填充一个数组

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

我相信这就完成了任务:)

为自己编写一个扩展方法

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 填充所有元素

你可以试试这样的东西:

我已经草签了值为5的数组,您可以类似地输入您的数字。

int[] arr = new int[10]; // your initial array
arr = arr.Select(i => 5).ToArray(); // array initialized to 5.

假设您想用数字13填充。

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

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

如果你喜欢列表。

您可以编写一个扩展方法

public static void Fill<T>(this T[] array, T value)
{
  for(int i = 0; i < array.Length; i++) 
  {
     array[i] = value;
  }
}
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的东西。