- 題名: 配列のソートについて
- 日時: 2007/06/28 15:08:25
- ID: 19955
- この記事の返信元:
- (なし)
- この記事への返信:
- [19957] Re[1]: 配列のソートについて2007/06/28 17:34:35
- ツリーを表示
IComparerインターフェイスを使って次のようにしてみました。
内部クラスCompareByHeightとCompareByWeightのCompareメソッドでは、
簡単のため引数にNothingがあった場合の処理を省略しています。
Class Person
Public Name As String
Public Height As Integer
Public Weight As Integer
Public WeightOrder As Integer
Public Sub New(ByVal name As String, ByVal height As Integer, ByVal weight As Integer)
Me.Name = name
Me.Height = height
Me.Weight = weight
End Sub
Class CompareByHeight
Implements IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer _
Implements System.Collections.IComparer.Compare
Dim person1 As Person = DirectCast(x, Person)
Dim person2 As Person = DirectCast(y, Person)
If person1.Height < person2.Height Then
Return -1
ElseIf person1.Height > person2.Height Then
Return 1
Else
Return 0
End If
End Function
End Class
Class CompareByWeight
'.Heightを.Weightに替える他はCompareByHeightと同じ
End Class
End Class
これを使って以下のようにすると、所要の結果が得られます(同体重の人がいた場合は考慮していません)。
Const PERSON_COUNT As Integer = 4
Dim p(PERSON_COUNT - 1) As Person
p(0) = New Person("A", 160, 60)
p(1) = New Person("B", 175, 80)
p(2) = New Person("C", 170, 50)
p(3) = New Person("D", 150, 70)
Array.Sort(p, New Person.CompareByWeight)
For i As Integer = 0 To PERSON_COUNT - 1
p(i).WeightOrder = i + 1
Next
Array.Sort(p, New Person.CompareByHeight)
分類:[ASP.NET]
2007/06/28(Thu) 15:27:56 編集(投稿者)
はじめまして、現在データ表示として
Dim name(10) As String
Dim height(10),weight(10) As Integer
name(0)="A",height(0)=160,weight(0)=60
name(1)="B",height(1)=175,weight(1)=80
name(2)="C",height(2)=170,weight(2)=50
name(3)="D",height(3)=150,weight(3)=70
と配列格納されたデータを、
D,150,3
A,160,2
C,170,1
B,175,4
と表示したいと考えております。
height順に表示はできるのですが、
weightの表示の様に格納されたデータでのランク付けは
可能なのでしょうか?
可能な場合は、どの様な関数を使用すれば良いのかを
お教えいただきたく思います。