如何使用数字vb.net对字母和数字排序列表框

时间:2013-08-05 12:05:53

标签: .net vb.net

我有一个类似的列表框:

test|10
name|44
blabla|16

我希望按照他们最后的数字(10 44 16)对这些项目进行排序,这样他们就会按照这样排序:

name|44
blabla|16
test|10

3 个答案:

答案 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

请看一下 Natural Comparerthis question on SO

答案 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

注意:您可以创建所需的任何类名称以及您想要的任何属性名称,我选择ItemNameValue,但它们可以是任何有效名称。

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

Dim listOfItems = New List(Of Item)

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

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

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

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