« [VB6.0] CSVの読み込み | メイン | [VB.NET] 二重起動防止 »

2005年10月14日

[VB.NET] 配列ソート

' ---通常のソート(クイックソート)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim strArray As String() = { _
"いろは ", _
"にほへと ", _
"ちりぬるを ", _
"わか ", _
"よたれそ ", _
"つねならむ " _
}

Array.Sort(strArray)

Label1.Text = ""
For i = 0 To 5
Label1.Text = Label1.Text & strArray(i) & vbCrLf
Next i

' 出力:
' いろは
' ちりぬるを
' つねならむ
' にほへと
' よたれそ
' わか
End Sub

'--- 独自ソート(Compareメソッド使用)

Private Sub Button2_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button2.Click

Dim strArray As String() = { _
"いろは ", _
"にほへと ", _
"ちりぬるを ", _
"わか ", _
"よたれそ ", _
"つねならむ " _
}

Dim Comp As IComparer = New StrLenComparer

Array.Sort(strArray, Comp)

Label1.Text = ""
For i = 0 To 5
Label1.Text = Label1.Text & strArray(i) & vbCrLf
Next i

' 出力:
' わか
' いろは
' よたれそ
' にほへと
' つねならむ
' ちりぬるを

End Sub

'文字列数比較クラス
Public Class StrLenComparer
Implements IComparer

Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
Dim str1 As String = CType(x, String)
Dim str2 As String = CType(y, String)

Return str1.Length - str2.Length
End Function
End Class

'--- 独自ソート(自作クラス使用)

Private Sub Button3_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button3.Click

Dim strArray As StrLenComparer2() = { _
New StrLenComparer2("いろは "), _
New StrLenComparer2("にほへと "), _
New StrLenComparer2("ちりぬるを "), _
New StrLenComparer2("わか "), _
New StrLenComparer2("よたれそ "), _
New StrLenComparer2("つねならむ ") _
}

Array.Sort(strArray)

Label1.Text = ""
For Each WordData As StrLenComparer2 In strArray
Label1.Text = Label1.Text & WordData.strData & vbCrLf
Next

' 出力:
' わか
' いろは
' よたれそ
' にほへと
' つねならむ
' ちりぬるを
End Sub
End Class

'自作文字列数比較クラス
Public Class StrLenComparer2
Implements IComparable
Public strData As String

Public Sub New(ByVal str As String)
strData = str
End Sub

Public Function Compare(ByVal objWord As Object) As Integer Implements IComparable.CompareTo
Dim str1 As StrLenComparer2 = Me
Dim str2 As StrLenComparer2 = CType(objWord, StrLenComparer2)

Return str1.strData.Length - str2.strData.Length
End Function
End Class

2005 / 10 / 14