-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

次のように、リストボックスに入る前にアイテムを並べ替えたいと思うでしょう:

次のように、リストボックス内の項目を保持するサンプル クラスを作成します。

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

注: 任意のクラス名と任意のプロパティ名を作成できます。ここではItemNameおよびを選択しますValueが、これらは任意の有効な名前にすることができます。

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 に答える
1

あなたが探しているのはIComparer Interface

Natural Comparerまたはthis question on SOをご覧ください 。

于 2013-08-05T12:18:07.793 に答える