配列で、合計を出したければ 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…