-5

我有一个类似这样的列表框:

test|10
name|44
blabla|16

我想按它们最后的数字(10 44 16)对这些项目进行排序,这样它们就变成了这样:

name|44
blabla|16
test|10
4

3 回答 3

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
于 2013-08-05T12:19:33.017 回答
1

我想你正在寻找的是IComparer Interface

请在 SO 上查看 Natural Comparer这个问题

于 2013-08-05T12:18:07.793 回答
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,但它们可以是任何有效的名称。NameValue

现在您创建一个List(Of T)来保存这些项目,如下所示:

Dim listOfItems = New List(Of Item)

然后你需要对列表进行排序并存储,如下所示:

Dim sortedListOfItems = listOfItems.OrderBy(Function(i) i.Value).ToList()

注意:这是用于通过扩展方法LINQ对列表进行排序。OrderBy

最后,您希望将此排序列表绑定到您的列表框控件。

于 2013-08-05T12:23:42.417 回答