次のようなリストボックスがあります。
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
次のように、リストボックスに入る前にアイテムを並べ替えたいと思うでしょう:
次のように、リストボックス内の項目を保持するサンプル クラスを作成します。
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
最後に、この並べ替えられたリストをリスト ボックス コントロールにバインドします。
あなたが探しているのはIComparer Interface
Natural Comparerまたはthis question on SOをご覧ください 。