解決済みの質問
C#において、配列の配列中に格納した値を、検索することを
行いたいのですが、格納した値そのものを見ることができません。
まだ、C#を始めて間もないので、配列に格納する時点で、
不備があるかも知れませんが、お願いします。
やりたいこと
・テキストファイル内にある値を、2次元配列または、多次元配列に格納
・配列に格納した値で、データチェックなどを行う予定
テキストファイル内のデータは、下記内容となり要素数も固定ではなく変動する
A=1,2,3・・・
B=11,22,33・・・
実際のソースは、
//配列
ArrayList list = new ArrayList();
//配列格納 1レコード毎用
ArrayList listtmp = new ArrayList();
while ((strGenderTextLine = objReader.ReadLine()) != null)
{
string strBuffer; //「=」前の値格納用変数
string[] strBuffer2; //「=」後の値格納用配列
listtmp=null;
//strtmpに「=」前の値を格納
strtmp = TextLine.Split('=').GetValue(0).ToString();
//strtmp2に「=」後の値を格納(配列)
strtmp2 = TextLine.Split('=').GetValue(1).ToString().Split(',');
for (int i = 0; i <= strtmp2.Length - 1; i ++)
{
//[i,0]に、「=」前の値を代入
if (i == 0)
{
listtmp.Add(strtmp);
}
else
{
listtmp.Add(strtmp2[i].ToString());
}
}
//list配列にlistTmp配列を格納(配列の配列)
list.Add(listtmp);
intT = intT + strtmp2.Length;
//行数カウント
intTLine = intTLine + 1;
}
ここから、配列「list」内に入っている値を閲覧することができる方法を教えていただければと思います。
宜しくお願いいたします。
投稿日時 - 2009-08-17 12:01:57
次のようにして取り出します。
((ArrayList)list[0]) [0]
ArrayListの変数に添字演算子を付けることでそれぞれの要素を取り出すことができます。
例 list[0]
ただし、取り出した型は object 型となってしまうため元の正しい型に型変換する必要があります。
例 (ArrayList)list[0]
これはArrayListを使用する上でよく使われる手法なので覚えておくと良いかもしれません。
蛇足ですが、listtmpの変数宣言はwhile文の中で行ったほうが良いのでは?
あと、最新のC#を使っているのなら List<>型を使ったほうが平易かと思います。
List<String> listtmp = new List<String>();
List<List<String>> list = new List<List<String>>();
listtmp.Add("test");
list.Add(listtmp);
System.Console.WriteLine(list[0][0]);
ArrayListの場合はあらゆる種類の変数をobject型に変換してリストとして扱えます。
ただし、objectに変換されるため値を取り出すときに元の型に変換する必要があります。
GenericのList型は扱う変数の型を固定することで値の取り出し時の手間を省けます。
Generic型を使うので慣れない人には若干高度に感じられるかもしれないので参考までに
投稿日時 - 2009-08-17 12:28:18
お礼
直ぐに回答していただき、ありがとうございます。
((ArrayList)list[0]) [0].ToString();
で値を取り出すことができました。
listtmpの変数宣言は、while文の中で行うようにします。
list配列の値が取り出せなかった時に、試行錯誤したときに、
外に出していたことをすっかり忘れていました。
ご指摘いただきまして、ありがとうございます。
あと、C#の環境ですが、最新のではなく2003年版のため、
List型は使用できないみたいです。。。(おそらく)
教えていただいた内容で、修正していきたいと思います。
本当に、ありがとうございます。
投稿日時 - 2009-08-17 12:48:25
2人が「このQ&Aが役に立った」と投票しています