23

Java では、クラス Arrays に約 18 個の静的な「塗りつぶし」メソッドがあり、配列内の各要素に 1 つの値を割り当てる役割を果たします。同じことを達成するためにC#で同等のものを探していますが、同じコンパクトさを持つものは見つかりません:

1)私が理解しているように、ForEachは配列内の要素を値で渡すので、それらを変更することはできません

2) Repeat from Enumerable は新しい配列を作成します。新しい配列を作成してから、配列から各要素をコピーするのはオーバーヘッドのようです

3) for ループはきれいではありません。これが、Java 関係者が最初からこのコンパクトな表記法を導入した理由だと思います。

4) Array クラスの Clear メソッドはすべてを 0 に設定できますが、ゼロを必要な非ゼロ値に変換するにはどうすればよいでしょうか?

Java の構文を示すために、7 の 3 倍を出力する次のコードを考えてみましょう。

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

6 に答える 6

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

私はこれが仕事をすると信じています:)

于 2013-02-17T09:28:42.057 に答える
19

拡張メソッドを自分で書く

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 で埋めます

于 2013-02-17T08:33:31.593 に答える
13

次のようなことを試すことができます:

値が 5 になるように配列を初期化しました。同様に数値を入力できます。

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

arr = arr.Select(i => 5).ToArray(); // array initialized to 5.
于 2013-02-17T08:31:26.030 に答える
5

数字の 13 を埋めたいとします。

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

また

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

リストを好む場合。

于 2013-02-17T08:45:34.710 に答える
4

拡張メソッドを書くことができます

public static void Fill<T>(this T[] array, T value)
{
  for(int i = 0; i < array.Length; i++) 
  {
     array[i] = value;
  }
}
于 2013-02-17T08:39:17.920 に答える
3
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 で機能するもの。

于 2013-02-17T08:42:14.793 に答える