我有一个类似这样的列表框:
test|10
name|44
blabla|16
我想按它们最后的数字(10 44 16)对这些项目进行排序,这样它们就变成了这样:
name|44
blabla|16
test|10
看起来您实际上是在寻找降序。无论如何,这是从一个列表到另一个列表的解决方案:
Dim myList As List(Of String) = {"test|10", "name|44", "blabla|16"}.ToList
Dim orderedList As List(Of String) = (From item In myList Order By item.Substring(item.IndexOf("|") + 1) Descending Select item).ToList
编辑:这会将项目排序为字符串,这意味着如果您有 44、16、100 和 10,排序后将如下所示:44、16、100、10。这可能不是您想要的,所以你应该将数字解析成整数,以便它们按数字排序。尝试这个:
Dim myList As List(Of String) = {"test|10", "name|44", "blabla|16", "foo|100"}.ToList
Dim orderedList As List(Of String) = (From item In myList Order By Integer.Parse(item.Substring(item.IndexOf("|") + 1)) Descending Select item).ToList
我想你正在寻找的是IComparer Interface
请在 SO 上查看 Natural Comparer或这个问题。
您将希望在项目进入列表框之前对其进行排序,如下所示:
我将创建一个示例类来保存列表框中的项目,如下所示:
Public Class Item
Public Property Name() As String
Get
Return m_Name
End Get
Set
m_Name = Value
End Set
End Property
Private m_Name As String
Public Property Value() As Integer
Get
Return m_Value
End Get
Set
m_Value = Value
End Set
End Property
Private m_Value As Integer
End Class
注意:你可以创建任何你想要的类名和你想要的任何属性名,我选择和Item
,但它们可以是任何有效的名称。Name
Value
现在您创建一个List(Of T)
来保存这些项目,如下所示:
Dim listOfItems = New List(Of Item)
然后你需要对列表进行排序并存储,如下所示:
Dim sortedListOfItems = listOfItems.OrderBy(Function(i) i.Value).ToList()
注意:这是用于通过扩展方法LINQ
对列表进行排序。OrderBy
最后,您希望将此排序列表绑定到您的列表框控件。