配列で、合計を出したければ Sum()、平均を出したければ Average() メソッドが便利ですが、配列の特定の範囲だけを対象にしたい場合。
Array.Copy()で任意の範囲を抜き出す
たとえば、次のように8つの要素がある配列の2番目から5つの要素の合計や、平均を求めたい場合、Array.Copy()を使って、一旦別の配列に抜き出してから、その配列を合計、平均すればいいです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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
List型ではCopyTo()で同様に処理できる
ところが、Array.Copy()はプリミティブ型(基本形)の配列しか扱えません。
でも、List型のようなCollection系の配列の場合、CopyTo()が使えるので同じように処理できます。
以下の例では、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
List<int> c = new List<int> { 85, 76, 68, 79, 82, 65, 72, 74 }; //List<int>型の合計 int c_sum = c.Sum(); //List<int>型の平均 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
似てますけど、微妙に違うので混乱してしまいそうなのでメモ。