2016-04-20 3 views
1

に2つの値に基づいて選手を並べ替える方法1人または複数のプレイヤーが同じスコアを持っていても、前のランクが最も低いプレイヤーが最初に表示されるように並べ替えるのが好きです。</p> <p>私は希望...そこスコアに基づいて分類し、私は私が管理している二つの値(スコアと前回の順位)に基づいて選手を並べ替えしたいと思います私のプログラムではVBScriptの

dim mPlayer(30) 

Class Player 
    dim score 
    dim name 
    dim lowestRank 
End Class 

dim sorted, i 
dim tempPlayer 
Set tempPlayer = New Player 
sorted = False 
Do Until sorted 
    sorted = True 
    For i = 0 To mNumPlayers - 2 
     If (mPlayer(i + 1).score > mPlayer(i).score) Then 
      ' swap 
      sorted = False 
      Call CopytempPlayerData(tempPlayer, mPlayer(i)) 
      Call CopytempPlayerData(mPlayer(i), mPlayer(i + 1)) 
      Call CopytempPlayerData(mPlayer(i + 1), tempPlayer) 
     End If 
    Next 
Loop 

Set temptempPlayer = Nothing 
lstPlayers.Clear() 

For i = 0 To mPlayer - 1 
    lstPlayers.Items.add(mPlayer(i).name) 
Next 
+1

は 'によってソートしてみ100000 * mPlayer(i).score±mPlayer(i).lowestRank'では、むしろ 'mPlayer(i).score'の代わりにsubst最大の「スコア」値を有するitute「100000」。しかし、[Sorting Algorithms](http://rosettacode.org/wiki/Category:Sorting_Algorithms)を見てください... – JosefZ

+0

最大得点はありません。私はmPlayer(i)を試みます。スコアー±mPlayer(i).lowestRank – Decoder94

答えて

0

If...Then...Else Statementを参照してください。構文:

' Block syntax: 
If condition Then 
    [statements] 
[ElseIf condition-n Then 
    [elseifstatements]] . . . 
[Else 
    [elsestatements]] 
End If 

Single-Line syntax: 
If condition Then statements [Else elsestatements ] 

次のように自分の状況に適用:

If (mPlayer(i + 1).score > mPlayer(i).score) Then 
     ' swap 
     sorted = False 
     Call CopytempPlayerData(tempPlayer, mPlayer(i)) 
     Call CopytempPlayerData(mPlayer(i), mPlayer(i + 1)) 
     Call CopytempPlayerData(mPlayer(i + 1), tempPlayer) 
    Else If (mPlayer(i + 1).score = mPlayer(i).score) Then 
     ''' not sure about Comparison Operator in next condition 
     If (mPlayer(i + 1).lowestRank < mPlayer(i).lowestRank) Then 
      ' swap 
      sorted = False 
      Call CopytempPlayerData(tempPlayer, mPlayer(i)) 
      Call CopytempPlayerData(mPlayer(i), mPlayer(i + 1)) 
      Call CopytempPlayerData(mPlayer(i + 1), tempPlayer)    
     End If 
    End If 

または以下のように(心Local Variables in Sub Proceduresに持つ)Sub procedureを使用します。

If (mPlayer(i + 1).score > mPlayer(i).score) Then 
     swapPlayers 
    Else If (mPlayer(i + 1).score = mPlayer(i).score) Then 
     ''' not sure about Comparison Operator in next condition 
     If (mPlayer(i + 1).lowestRank < mPlayer(i).lowestRank) Then 
      swapPlayers 
     End If 
    End If 

' remaining script statements here 

Sub swapPlayers 
     ' swap 
     sorted = False 
     Call CopytempPlayerData(tempPlayer, mPlayer(i)) 
     Call CopytempPlayerData(mPlayer(i), mPlayer(i + 1)) 
     Call CopytempPlayerData(mPlayer(i + 1), tempPlayer) 
End Sub 
関連する問題