【问题标题】:How to sort players based on two value in VBScript如何根据VBScript中的两个值对播放器进行排序
【发布时间】:2016-04-21 00:10:39
【问题描述】:

在我的程序中,我想根据两个值(得分和以前的排名)对玩家进行排序,我已经设法根据得分进行排序..

如果一个或多个玩家的分数相同,但我想重新排序,但之前排名最低的玩家应该首先显示。

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

【问题讨论】:

  • 尝试按100000 * mPlayer(i).score ± mPlayer(i).lowestRank 排序,而不是按mPlayer(i).score 排序,其中100000 替换为最大score 值。不过,看看Sorting Algorithms...
  • 没有最高分。我会尝试 mPlayer(i).score ± mPlayer(i).lowestRank

标签: sorting vbscript


【解决方案1】:

阅读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

或使用Sub procedure 如下(记住Local Variables in Sub Procedures):

    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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-09
    • 2021-07-20
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多