配列で、合計を出したければ Sum()、平均を出したければ Average() メソッドが便利ですが、配列の特定の範囲だけを対象にしたい場合。
たとえば、次のように8つの要素がある配列の2番目から5つの要素の合計や、平均を求めたい場合、Array.Copy()を使って、一旦別の配列に抜き出してから、その配列を合計、平均すればいいです。
int[] a = new int[] { 85, 76, 68, 79, 82, 65, 72, 74 }; //int型の配列の合計 int a_sum = a.Sum(); //int型の配列の平均 double a_avg = a.Average(); //配列の1つ目から5つを抜き出す int[] b = new int[5]; Array.Copy(a, 1, b, 0, 5); //抜き出したint型の配列の合計 int b_sum = b.Sum(); //抜き出したint型の配列の平均 double b_avg = b.Average();
上の例では、Array.Copy(c, 1, d, 0, 5); で、List c の1つ目から配列のコピーを、bのはじめ(0)から5つ分配置する。ということになります。
ところが、Array.Copy()はプリミティブ型(基本形)の配列しか扱えません。
でも、List型のようなCollection系の配列の場合、CopyTo()が使えるので同じように処理できます。
以下の例では、
List c = new List { 85, 76, 68, 79, 82, 65, 72, 74 }; //List型の合計 int c_sum = c.Sum(); //List型の平均 double c_ave = c.Average(); int[] d = new int[5]; c.CopyTo(1, d, 0, 5); //抜き出したint型の配列の合計 int d_sum = d.Sum(); //抜き出したint型の配列の平均 double d_avg = d.Average();
a.CopyTo(1, b, 0, 5); で、List a の1つ目から配列のコピーを、bのはじめ(0)から5つ分配置する。ということになります。
似てますけど、微妙に違うので混乱してしまいそうなのでメモ。
[Collab] Collab…