用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);
}
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的东西。