我有一个类似的列表框:
test|10
name|44
blabla|16
我希望按照他们最后的数字(10 44 16)对这些项目进行排序,这样他们就会按照这样排序:
name|44
blabla|16
test|10
答案 0 :(得分:2)
看起来你实际上在寻找降序。无论如何,这是从一个列表到另一个列表的解决方案:
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
答案 1 :(得分:1)
我猜你要找的是IComparer Interface
答案 2 :(得分:1)
您希望在项目进入列表框之前对其进行排序,如下所示:
我将创建一个示例类来保存列表框中的项目,如下所示:
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
扩展方法对列表进行排序。
最后,您希望将此已排序的列表绑定到列表框控件。