- PR -

カスタムCollectionクラスで複数列のソート

1
投稿者投稿内容
どら
会議室デビュー日: 2005/08/25
投稿数: 5
投稿日時: 2005-08-31 11:18
お世話になっております。

CollectionBaseから継承したカスタムコレクションで、複数列を対象にしたソート処理を行いたいと思っております。単一列であればソート可能でしたが、複数列の場合の記述がわかりません。ご教示いただけたら幸いです。よろしくお願い致します。

ちなみに現在は以下のようなソースで実行していますが、(当然ながら)最後列のソート条件しか有効になりませんでした(涙)
コード:
Public Calss CarList
〜
End Class

Public Class CarListCollection
  inherits CollectionBase
〜
'引数には「MODEL_YEAR DESC,CAR_NAME ASC」といったように複数項目をカンマで区切ってわたしています
  Public Sub Sort(ByVal strSortOrders As String)
   Dim strSort As String
    Dim strArraySort() = strSortOrders.Split(",")
 
    For Each strSort In strArraySort
       Dim strSortOrder() = strSort.Split(" ")
       Dim classComparer As New ClassComparer(strSort(0),StrSort(1))
       InnerList.Sort(classComparer)
    Next
  End Sub
End Class

Public Class ClassComparer
   ImPlements IComparer
〜
  Public Sub New(Byval strSortPropertyName As String,ByVal strSortOrder As String)
〜
 End Sub

  Puclic Function Comparer(ByVal As Object,ByVal As Object)As Integer Implements IComparer.Comparer
    Dim carList1 As New CType(x,CarList)
    Dim carList2 As New CType(y,CarList)
〜
    Select Case Me._sortOrder
        Case "ASC"
            Rerutn carLst1.GetProperty(Me._sortPropertyName) < carList2.GetProperty(Me._sortPropertyName)
        Case "DESC"
            Rerutn carLst1.GetProperty(Me._sortPropertyName) > carList2.GetProperty(Me._sortPropertyName)
    End Select
  End Function
End Class



Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2005-08-31 11:47
条件1・2を両方受け取るIComparerの実装クラスを作って、そのCompareメソッドで、第一条件が等しかったとき(かどうかは知りませんが)に第二条件で比較すればいいんでは?

コード:
Public Sub New(ByVal condition1 As String, ByVal condition2 As String, ByVal order As String)
   ...
End Sub
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
   ...
   Dim xValue1 = xItem.GetValue(condition1)
   Dim yValue1 = yItem.GetValue(condition1)
   If xValue1 = yValue1
      Return xItem.GetValue(condition2) - yItem.GetValue(condition2)
   Else
      ...
   End If
End Function

どら
会議室デビュー日: 2005/08/25
投稿数: 5
投稿日時: 2005-08-31 13:21
Hongliang様

教えていただいた通り、第一条件が等しかった場合に第二条件で比較したところ、期待する結果を得ることができました。
お教えいただいたソースを参考に、3つ以上検索条件があった場合に対応させてみます。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)