C# 配列やListで任意の範囲を合計したり、平均出したり。

配列で、合計を出したければ Sum()、平均を出したければ Average() メソッドが便利ですが、配列の特定の範囲だけを対象にしたい場合。

Array.Copy()で任意の範囲を抜き出す

たとえば、次のように8つの要素がある配列の2番目から5つの要素の合計や、平均を求めたい場合、Array.Copy()を使って、一旦別の配列に抜き出してから、その配列を合計、平均すればいいです。

上の例では、Array.Copy(c, 1, d, 0, 5); で、List c の1つ目から配列のコピーを、bのはじめ(0)から5つ分配置する。ということになります。

List型ではCopyTo()で同様に処理できる

ところが、Array.Copy()はプリミティブ型(基本形)の配列しか扱えません。
でも、List型のようなCollection系の配列の場合、CopyTo()が使えるので同じように処理できます。

以下の例では、

a.CopyTo(1, b, 0, 5); で、List a の1つ目から配列のコピーを、bのはじめ(0)から5つ分配置する。ということになります。

似てますけど、微妙に違うので混乱してしまいそうなのでメモ。

タイトルとURLをコピーしました