構造体配列のソート(ソートのパターンを変更)(VB.NET)_1 (No.1の個別表示) [スレッド一覧へ] |
- 日時: 2011/04/05 11:00
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[アルゴリズム][][] * * キーワード:構造体,配列,ソート,並べ替え,, * ***********************************************************************************
----------------------------------------------------------------------------------- ソートのパターンを変更するコード - 特攻隊長まるるう 2004/03/18-17:53 No.779 ----------------------------------------------------------------------------------- 興味があったのでちょっと触らせてもらいました。 大変勉強になりました。 タートルさん、魔界の仮面弁士さん、ありがとうございます。
Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim a(2) As MyUDT MyUDT.Pattern = 1 a(0) = New MyUDT("CCC", "BBB") a(1) = New MyUDT("BBB", "AAA") a(2) = New MyUDT("A", "GGG") Array.Sort(a) MyUDT.Pattern = 2 Array.Sort(a) End Sub
Protected Friend Structure MyUDT : Implements System.IComparable Friend Code As String, Name As String Shared Pattern As Integer Friend Sub New(ByVal Code As String, ByVal Name As String) Me.Code = Code Me.Name = Name End Sub Private Overloads Function CompareTo(ByVal obj As Object) _ As Integer Implements System.IComparable.CompareTo Dim cmp As Integer Try Dim X As MyUDT = DirectCast(obj, MyUDT) Select Case Me.Pattern Case 1 cmp = Me.Code.CompareTo(X.Code) If cmp = 0 Then cmp = Me.Name.CompareTo(X.Name) End If Return cmp Case 2 cmp = Me.Code.CompareTo(X.Name) If cmp = 0 Then cmp = Me.Name.CompareTo(X.Code) End If Return cmp Case Else cmp = Me.Code.CompareTo(X.Code) If cmp = 0 Then cmp = Me.Name.CompareTo(X.Name) End If Return cmp End Select Catch Return 0 End Try End Function
End Structure
-----------------------------------------------------------------------------------
降順ソートの場合下記のようにソート後、Reverse する事で降順になります。 速度的に倍かかるように思われがちですが、条件等にもよりますが、誤差の範囲程度です。 (見た目では区別がつきません)
Array.Sort(a) Array.Reverse(a) 'これを追加しても処理速度的にはあまり大差がない
---- by 花ちゃん ----
|
構造体配列のソート(VB.NET)_2 (No.2の個別表示) [スレッド一覧へ] |
- 日時: 2011/04/05 11:00
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[アルゴリズム][][] * * キーワード:構造体,配列,ソート,並べ替え,, * ***********************************************************************************
----------------------------------------------------------------------------------- Re: 構造体のソートについて - ねろ 2005/05/31-11:42 No.1770 -----------------------------------------------------------------------------------
こんな方法もあるのかな。 Returnのところにブレイクポイントを置くとクイックソートやってるのがわかる。
Option Strict On Imports System
Private Structure CompanyStaff Implements IComparable Public Code, Name As String Public Function CompareTo(ByVal obj As Object) As Integer Implements _ IComparable.CompareTo Return Me.Code.CompareTo(DirectCast(obj, CompanyStaff).Code) End Function End Structure
'//以下単に確認のコード Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim Person As CompanyStaff() ReDim Person(3) Person(0).Code = "0004" : Person(0).Name = "すずき-0004" Person(1).Code = "0003" : Person(1).Name = "あらき-0003" Person(2).Code = "0005" : Person(2).Name = "やまだ-0005" Person(3).Code = "0006" : Person(3).Name = "たなか-0006" Console.WriteLine("ソート前") For Each w As CompanyStaff In Person Console.WriteLine(w.Name) Next Console.WriteLine("ソート後") Array.Sort(Person) For Each w As CompanyStaff In Person Console.WriteLine(w.Name) Next End Sub
|
|