プロが教えるわが家の防犯対策術!

お世話になります。vb.net2010で開発をしております。
System.Collections.Generic.ListにクラスをAddしたクラス変数をソートしたいと考えております。
コードを以下に記述します。

Dim list As New List(Of aaa)
Dim listWork As New aaa


' クラス変数に格納する
listWork.strA = "2015/02/01"
listWork.strB = "17:00"
listWork.strC = "タロウ"
' リストに追加する
list.Add(listWork)

' クラス変数に格納する
listWork.strA = "2015/02/02"
listWork.strB = "17:00"
listWork.strC = "ジロウ"
' リストに追加する
list.Add(listWork)

Public Class aaa
Public strA As String(日付型文字列)
Public strB As String(時刻文字列)
Public strC As String(任意の値)
End Class

このlistを日付型文字列でソートしたいのですが、いまいちうまくいきません。
sortメソッドはlistに実装されているようですが、使用方法が理解できていません。
実際にソートを行うことは可能なのでしょうか。
もし可能であれば、サンプルコードをご教示いただけますでしょうか。
恐れ入りますが、どなたかご教示いただければ幸いに存じます。

以上宜しくお願い申し上げます。

A 回答 (1件)

簡単な方法では,Comparisonを引数にとるSortメソッドを使います。


https://msdn.microsoft.com/ja-jp/library/w56d4y5 …

list.Sort(Function (x, y) String.Compare(x.strA, y.strA))

何箇所でも行うのであれば,IComaprer(Of aaa)を実装したクラスを用意して,そのインスタンスを渡すとよいでしょう。


ただし,元のプログラムでは,listに入っている要素が全て同じオブジェクトのインスタンスになっています。
Addする要素は,それぞれ別々にNewした要素にしないといけません。
現在のコードで,2回Addした直後にブレークポイントをおいて,listの各要素のフィールドの値を見てみるとよいでしょう。
    • good
    • 1
この回答へのお礼

ご回答ありがとうございました。実はそのHPも確認済みだったのですが、いまいちうまくいかず悩んでおりました。その後、DataSetでソートする方法に変更し、目的動作が実行されることを確認しました。また、ご指摘のコードについては、記述ミスです。サンプル書きをしたため、本来ループで毎回初期化している処理を2重に記述してしまいました。申し訳ございませんでした。ご教示ありがとうございました。

お礼日時:2015/02/10 23:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!