如何在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】:

假设lstDocumentChildrenList(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-如何按对象内的某个值对对象列表进行排序

我如何测试使用硒在下拉菜单中按字母顺序对项目进行排序

如何在PHP中按值对对象数组进行排序

如何在 React.js 中按字母顺序对数组中的对象进行排序

如何在 Reactjs 中按升序或降序对数据进行排序?