如何在VB中按某个组件对对象列表进行排序?
Posted
技术标签:
【中文标题】如何在VB中按某个组件对对象列表进行排序?【英文标题】:How can I sort a list of objects by a certain component in VB? 【发布时间】:2021-10-16 11:23:57 【问题描述】:我正在使用带有 .NET 3.5 的 Visual Studio 2008,我正在尝试对存储某个对象的子对象的对象列表进行排序。
我想按日期对“lstDocumentChildren”列表进行排序,如名为“LastDate”的代码所示。
For i As Integer = 0 To mobjDocuments.Children.ChildrenCount - 1
mobjDocumentsDetail = mobjDocuments.Children.GetChild(i)
lstDocumentChildren.Add(mobjDocumentsDetail)
If mobjDocumentsDetail.enmClassState = clsGlobals.enmClassState.enmNewRowState Or mobjDocumentsDetail.enmClassState = clsGlobals.enmClassState.enmFillState Then
objListItem = New System.Windows.Forms.ListViewItem
objListItem.Text = intDocCount & "_" & mobjDocumentsDetail.DocumentName
objListItem.SubItems.Add(mobjDocumentsDetail.LastUser)
objListItem.SubItems.Add(mobjDocumentsDetail.LastDate)
objListItem.Tag = mobjDocumentsDetail
'ManageMediaFiles.Items(0).c()
mobjlvMediaFiles.Items.Add(objListItem)
'ManageMediaFiles.rows()
'mobjlvMediaFiles.Columns(0).Text = "Media Files of Document : " & objEBDocument.DocumentName
'objEBDocument = CType(mobjlvDocuments.Items(0).Tag, ebAPIDocument)
'mobjlvDocuments.Columns(0).Text = "Document : " & objEBDocument.DocumentName
intDocCount += 1
End If
Next
' THIS IS WHERE I WANT TO MAKE IT SORT THE LIST /////////////'
【问题讨论】:
【参考方案1】:假设lstDocumentChildren
是List(Of T)
,其中特定类型T
具有LastDate
类型为Date
的属性,最简单的选择是调用采用@ 的Sort
方法的重载987654328@代表:
lstDocumentChildren.Sort(Function(x, y) x.LastDate.CompareTo(y.LastDate))
我相当确定 lambda 表达式将在 .NET 3.5 中工作。如果没有,您可以改用命名方法:
Private Function CompareByLastDate(x As SomeType, y As SomeType) As Integer
Return x.LastDate.CompareTo(y.LastDate)
End Function
然后为此创建一个委托:
lstDocumentChildren.Sort(New Comparison(Of SomeType)(AddressOf CompareByLastDate))
我不确定,但您可以将其简化为:
lstDocumentChildren.Sort(AddressOf CompareByLastDate)
要了解有关排序的更多信息,您可能会受益于阅读我关于该主题的三部分 blog post。
【讨论】:
以上是关于如何在VB中按某个组件对对象列表进行排序?的主要内容,如果未能解决你的问题,请参考以下文章
Android-java-如何按对象内的某个值对对象列表进行排序