按从高到低对数组进行排序,然后从 1+ 开始分配一个数字(作为排名)VB

Sorting arrays by highest to lowest then assigning a number from 1+ (as a rank) VB

我正在尝试根据从高到低对数组进行排序,然后为数组中的每个项目分配一个值。 (我正在制作一个有排名的排行榜系统)

例如:

Array(0) = 225558
Array(1) = 281158
Array(2) = 1131
Array(3) = 46212
Array(4) = 358119

排序为

Array(0) = 358119
Array(1) = 281158
Array(2) = 225558
Array(3) = 46212
Array(4) = 1131

然后从1+给他们一个值,保存到数据库中。

我目前有:

 Dim lv, EXP, Floor, Logins As Integer
    Dim PKs, Mob, Deaths, Bounty As Integer
    Dim Total1, Total As Integer
    'Not yet used - Dim User As String'
    Dim inc As Integer

    con.Open()
    sql = "SELECT * FROM tblUsers"
    da = New OleDb.OleDbDataAdapter(sql, con)
    da.Fill(ds, "Count")
    Count = ds.Tables("Count").Rows.Count

    Dim Rank(Count) As Integer
    'Not yet used -' Dim Users(Count) As String

    For inc = 0 To Count - 1
        Users(inc) = ds.Tables("Count").Rows(inc).Item(0)
    Next

    For inc = 0 To Count - 1
        sql = "SELECT Lv FROM tblUsers"
        da = New OleDb.OleDbDataAdapter(sql, con)
        da.Fill(ds, "Lv")

        lv = ds.Tables("Lv").Rows(inc).Item(0)


        sql = "SELECT EXP FROM tblUsers"
        da = New OleDb.OleDbDataAdapter(sql, con)
        da.Fill(ds, "EXP")

        EXP = ds.Tables("EXP").Rows(inc).Item(0)


        sql = "SELECT Floor FROM tblUsers"
        da = New OleDb.OleDbDataAdapter(sql, con)
        da.Fill(ds, "Floor")

        Floor = ds.Tables("Floor").Rows(inc).Item(0)


        sql = "SELECT Logins FROM tblUsers"
        da = New OleDb.OleDbDataAdapter(sql, con)
        da.Fill(ds, "Logins")

        Logins = ds.Tables("Logins").Rows(inc).Item(0)


        sql = "SELECT PKs FROM tblKills"
        da = New OleDb.OleDbDataAdapter(sql, con)
        da.Fill(ds, "PKs")

        PKs = ds.Tables("PKs").Rows(inc).Item(0)


        sql = "SELECT Mob FROM tblKills"
        da = New OleDb.OleDbDataAdapter(sql, con)
        da.Fill(ds, "Mob")

        Mob = ds.Tables("Mob").Rows(inc).Item(0)


        sql = "SELECT Deaths FROM tblKills"
        da = New OleDb.OleDbDataAdapter(sql, con)
        da.Fill(ds, "Deaths")

        Deaths = ds.Tables("Deaths").Rows(inc).Item(0)


        sql = "SELECT Bounty FROM tblKills"
        da = New OleDb.OleDbDataAdapter(sql, con)
        da.Fill(ds, "Bounty")

        Bounty = ds.Tables("Bounty").Rows(inc).Item(0)


        Total1 = lv + EXP + Floor + Logins
        Total = Total1 - (PKs * 2) + Mob - (Deaths * 2) - Bounty



        'sql = "SELECT * FROM tblUsers"'
        'da = New OleDb.OleDbDataAdapter(sql, con)'
        'da.Fill(ds, "Users")'

        'User = ds.Tables("Users").Rows(inc).Item(1)'

        Rank(inc) = Total

        'Saves total for each user row'
    Next
    'Trying to sort with users so that i can save it under the right user'
    Array.Sort(Rank, Users)

    con.Close()

这里我根据数据库中的数据进行计算。 当涉及到排序时,我希望它为他们分配一个排名,然后将其保存到相应用户名下的数据库中。

Link 到我的数据库:https://drive.google.com/folderview?id=0B8HDvQ3oZFi6fjlXUU1wRklybVB0YS02MzlxM3pXQUxpdHVXU3JVbWpuNWMteVlVOVNLYkE&usp=sharing

谁能帮助我,我的截止日期是几个月后,我不知道该怎么做。

谢谢,安迪

我不知道数据库部分是如何关联的,但是回答你的排序问题...

首先,您需要根据需要将所有值增加 1:

For i As Int32 = 0 To Array.Length - 1
    Array(i) = Array(i) + 1
Next

现在您可以使用 LINQ 进行排序了:

Dim orderedDesc = From i In Array Order By i Descending
Array = orderedDesc.ToArray()

或者不用LINQ,不需要创建新数组而是对原数组进行排序:

System.Array.Sort(Array, Function(i1, i2) i2.CompareTo(i1)) ' swapped for descending sort

LINQ 版本更具可读性,尤其是在降序排序方面。