用C#填充数组

时间:2013-02-17 08:20:01

标签: c# arrays

在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);
}

6 个答案:

答案 0 :(得分:41)

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

我相信这可以做到这一点:)

答案 1 :(得分:14)

自己写一个扩展方法

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 :(得分:9)

您可以尝试这样的事情:

我已将数组初始化为值为5,您可以类似地设置数字。

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

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

答案 3 :(得分:6)

假设您要填写13号。

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

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

如果您更喜欢列表。

答案 4 :(得分:3)

你可以写一个扩展方法

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

答案 5 :(得分:1)

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>的东西。