- 題名: 配列のソートについて
- 日時: 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の表示の様に格納されたデータでのランク付けは
可能なのでしょうか?
可能な場合は、どの様な関数を使用すれば良いのかを
お教えいただきたく思います。