web-dev-qa-db-ja.com

VB.NETでオブジェクトのリストを並べ替える

異なるプロパティを持つ乗客(オブジェクト)のリストがあります。

passenger.name
passenger.age
passenger.surname

このリストを年齢基準で並べ替えたいのですが、どうすればよいですか?

私は整数/文字列のリストでList.Sort()が動作することを知っていますが、オブジェクトリストの場合、オブジェクトプロパティの値でソートできるかどうかはわかりません!

ありがとう。

43
bombai

オブジェクト内のプロパティでソートするには、そのプロパティを取得するための比較器またはメソッドを指定する必要があります。

List.Sort 方法:

theList.Sort(Function(x, y) x.age.CompareTo(y.age))

OrderBy拡張メソッドを使用する:

theList = theList.OrderBy(Function(x) x.age).ToList()
101
Guffa

カスタム文字列の並べ替えが必要な場合は、指定した順序に基づいて数値を返す関数を作成できます。

たとえば、前面または留め金に基づいて並べ替えたい写真がありました。だから私は次のことをしました:

Private Function sortpictures(s As String) As Integer
    If Regex.IsMatch(s, "FRONT") Then
        Return 0
    ElseIf Regex.IsMatch(s, "SIDE") Then
        Return 1
    ElseIf Regex.IsMatch(s, "CLASP") Then
        Return 2
    Else
        Return 3
    End If
End Function

次に、次のようにソート関数を呼び出します。

list.Sort(Function(elA As String, elB As String)
                  Return sortpictures(elA).CompareTo(sortpictures(elB))
              End Function)
4
user890332

iComparerインターフェイスを実装する必要があります。

このサンプルでは、​​カスタムオブジェクトJSONReturnを使用し、次のようにクラスを実装しています。

Friend Class JSONReturnComparer
    Implements IComparer(of JSONReturn)

    Public Function Compare(x As JSONReturn, y As JSONReturn) As Integer Implements    IComparer(Of JSONReturn).Compare
        Return String.Compare(x.Name, y.Name)
    End Function

End Class

次のようにsort Listメソッドを呼び出します:alResult.Sort(new JSONReturnComparer())

たぶんそれはあなたを助けるかもしれない