コレクションを利用しよう (1/6)
作成:2014-03-08 09:49
更新:2014-03-08 09:49
更新:2014-03-08 09:49
■ArrayListについて
C#では、多数のオブジェクトをまとめて扱う場合、配列の他に「コレクション」と呼ばれるクラスを利用することができます。
コレクションは、多数のオブジェクトをうまく扱えるようにする機能をメソッドとして実装しているクラスです。配列よりも柔軟な要素の扱いができるようになっているため、オブジェクトを管理するのに多用されます。コレクションは、 System.Collectionsというパッケージにまとめられています。
このコレクションは、その性質からいくつかのクラスが用意されています。もっとも基本となるのは、「ArrayList」というクラスでしょう。これはオブジェクトを順番付けして管理するためのコレクションです。平たくいえば、「配列とだいたい同じような扱い方ができるコレクション」といってよいでしょう。
同じなら配列でいいじゃないか、と思うかもしれませんが、C#の配列は意外に窮屈なものです。配列は動的な要素の変更ができません。作成する際に「いくつ保管できるか」を指定し、作った後で増やしたりできないんですね。ArrayListを使えば、もっと自由に値を保管することができます。では、基本的な使い方を整理しましょう。
●インスタンスの作成
●要素を追加する
●指定の場所に追加する
《ArrayList》.Insert( インデックス, オブジェクト );
《ArrayList》.InsertRange( インデックス, コレクション );
指定の場所にオブジェクトを追加したいときはInsertを使います。第1引数に追加する場所となるインデックス番号を、第2引数に追加するオブジェクトを渡します。InsertRangeを使えば、コレクションの全オブジェクトを指定の場所にまとめて追加できます。
●要素を削除する
●要素を読み書きする
ArrayListから指定のインデックス番号のオブジェクトを取り出すのは、配列と同じように[]で番号を指定するだけです。簡単ですね。また、「このオブジェクトのインデックス番号はいくつか?」を調べたいときは、IndexOfを利用します。注意したいのは、「取り出す値はObjectになっている」という点です。ArrayListには何が入っているかわかりませんからね。Objectとして取り出し、必要に応じて元のクラスにキャストして使うのです。
●要素数を示すプロパティ
――ざっとこれぐらいがわかればArrayListの基本的な使い方はできるようになるでしょう。下に簡単な利用例を挙げておきます。ここではforeachで値を順に取り出し表示させています。配列に近い感覚で利用できることがわかるでしょう。
コレクションは、多数のオブジェクトをうまく扱えるようにする機能をメソッドとして実装しているクラスです。配列よりも柔軟な要素の扱いができるようになっているため、オブジェクトを管理するのに多用されます。コレクションは、 System.Collectionsというパッケージにまとめられています。
このコレクションは、その性質からいくつかのクラスが用意されています。もっとも基本となるのは、「ArrayList」というクラスでしょう。これはオブジェクトを順番付けして管理するためのコレクションです。平たくいえば、「配列とだいたい同じような扱い方ができるコレクション」といってよいでしょう。
同じなら配列でいいじゃないか、と思うかもしれませんが、C#の配列は意外に窮屈なものです。配列は動的な要素の変更ができません。作成する際に「いくつ保管できるか」を指定し、作った後で増やしたりできないんですね。ArrayListを使えば、もっと自由に値を保管することができます。では、基本的な使い方を整理しましょう。
●インスタンスの作成
new ArrayList();インスタンスの作成は、ただnewするだけでOKです。引数に整数を指定すれば、その数だけ保管する場所を確保してインスタンスを作れます。ただし、ArrayListは後でいくらでもサイズを増やせますから、普通は引数を指定せず、ただnewするだけでいいでしょう。また、既にオブジェクトを保管しているコレクションがある場合は、それを引数に指定することで、その中に保管されているオブジェクトを入れた状態でArrayListインスタンスを作ることができます。
new ArrayList( サイズ );
new ArrayList( コレクション );
●要素を追加する
《ArrayList》.Add( オブジェクト );要素の追加はAddを利用します。これで一番最後に引数のオブジェクトを付け足します。またAddRangeを使うと、引数のコレクションの中に保管してあるすべてのオブジェクトを一番最後に追加することができます。
《ArrayList》.AddRange( コレクション );
●指定の場所に追加する
《ArrayList》.Insert( インデックス, オブジェクト );
《ArrayList》.InsertRange( インデックス, コレクション );
指定の場所にオブジェクトを追加したいときはInsertを使います。第1引数に追加する場所となるインデックス番号を、第2引数に追加するオブジェクトを渡します。InsertRangeを使えば、コレクションの全オブジェクトを指定の場所にまとめて追加できます。
●要素を削除する
《ArrayList》.Remove( オブジェクト );オブジェクトの削除はRemoveとRemoveAtがあります。前者はオブジェクトを指定して取り除き、後者はインデックス番号を指定して取り除きます。またRemoveRangeを使えば、指定の場所から決まった数だけまとめて取り除けます。これらは、ArrayListに入っているオブジェクトを除外するだけなので、オブジェクトそのものは消去されるわけではありません。ArrayListから取り除いた後もオブジェクト自体は利用できます。
《ArrayList》.RemoveAt( インデックス);
《ArrayList》.RemoveRange( インデックス, 要素数 );
●要素を読み書きする
《ArrayList》[ インデックス ] = オブジェクト;ArrayListの特定のインデックス番号にオブジェクトを保管するには、配列と同様に[]でインデックス番号を指定してやります。ただし注意したいのは、このやり方は「まだそのインデックス番号の要素が用意されていないとエラーになる」という点です。ですから、ただ追加するだけならAddを使ったほうがいいでしょう。これは「既に保管されている値を書き換える」というときに使うと考えましょう。
Object 変数 = 《ArrayList》[ インデックス ];
int 変数 = 《ArrayList》.IndexOf( オブジェクト );
ArrayListから指定のインデックス番号のオブジェクトを取り出すのは、配列と同じように[]で番号を指定するだけです。簡単ですね。また、「このオブジェクトのインデックス番号はいくつか?」を調べたいときは、IndexOfを利用します。注意したいのは、「取り出す値はObjectになっている」という点です。ArrayListには何が入っているかわかりませんからね。Objectとして取り出し、必要に応じて元のクラスにキャストして使うのです。
●要素数を示すプロパティ
int 変数 = 《ArrayList》.Count;
――ざっとこれぐらいがわかればArrayListの基本的な使い方はできるようになるでしょう。下に簡単な利用例を挙げておきます。ここではforeachで値を順に取り出し表示させています。配列に近い感覚で利用できることがわかるでしょう。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
using System; using System.Collections; namespace MyCLIApp { class Program { public static void Main(string[] args) { ArrayList list = new ArrayList(); list.Add("One"); list.Add("Two"); list.Add("Three"); list[0] = "Zero"; foreach(Object obj in list){ Console.WriteLine(obj); } Console.ReadKey(true); } } }
※関連コンテンツ