在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);
}
答案 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>
的东西。