トップ回答者
List<T>のソートについて

質問
-
お世話になります。mkmarimoです。
基本的なことかもしれませんがご教授お願いします。
List<XXX>に以下のような独自定義のクラスのオブジェクトを複数追加します。
calss XXXXX
{
string aaa;
string bbb;
bool ccc;
bool ddd;
}
Listが完成したあと、List内の要素をXXXXXクラスのaaa変数に格納されている文字列で
ソートしたいんですが、どのようにすればよいでしょうか。
List<T>.Sort()を実行したところ、InvalidOperationException(innerExceptionがArgumentException)が
スローされました。
ArgumentExceptionのメッセージは「少なくとも1つのオブジェクトでIComparableを実装しなければなりません。」と
なっていました。
回答
-
mkmarimoさんこちらのコードでどうでしょうか?
//配列作成
string[] str = new string[] { "a", "0", "b", "1", "あ" };
List< string > list = new List< string >();
//Listに追加 List<string> を作成
foreach(string value in str)
{
list.add(value);
}
Comparison<string> comp = new Comparison<string>(delegate(string val1, string val2)
{
return val1.CompareTo(val2);}
);
//ソート実行
list.Sort(comp);
mkmarimoさんのサンプルコードで実装しますと
List<xxxx> list = new List<xxxx>();Comparison<xxxx> comp = new Comparison<xxxx>(delegate(xxxx classA , xxxx classB){return classA.aaa.CompareTo(classB.aaa);
}
);list.sort(comp);Linqの場合はコード記述が更に楽です。List<xxxx> list = new List<xxxx>();list = list.OrderBy(o => o.aaa).toList();説明が乱雑かと思いますが、実際にコードを実行し、デバックで確認してもらえれば。
すべての返信
-
mkmarimoさんこちらのコードでどうでしょうか?
//配列作成
string[] str = new string[] { "a", "0", "b", "1", "あ" };
List< string > list = new List< string >();
//Listに追加 List<string> を作成
foreach(string value in str)
{
list.add(value);
}
Comparison<string> comp = new Comparison<string>(delegate(string val1, string val2)
{
return val1.CompareTo(val2);}
);
//ソート実行
list.Sort(comp);
mkmarimoさんのサンプルコードで実装しますと
List<xxxx> list = new List<xxxx>();Comparison<xxxx> comp = new Comparison<xxxx>(delegate(xxxx classA , xxxx classB){return classA.aaa.CompareTo(classB.aaa);
}
);list.sort(comp);Linqの場合はコード記述が更に楽です。List<xxxx> list = new List<xxxx>();list = list.OrderBy(o => o.aaa).toList();説明が乱雑かと思いますが、実際にコードを実行し、デバックで確認してもらえれば。
-