按从高到低对数组进行排序,然后从 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()
这里我根据数据库中的数据进行计算。
当涉及到排序时,我希望它为他们分配一个排名,然后将其保存到相应用户名下的数据库中。
谁能帮助我,我的截止日期是几个月后,我不知道该怎么做。
谢谢,安迪
我不知道数据库部分是如何关联的,但是回答你的排序问题...
首先,您需要根据需要将所有值增加 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 版本更具可读性,尤其是在降序排序方面。
我正在尝试根据从高到低对数组进行排序,然后为数组中的每个项目分配一个值。 (我正在制作一个有排名的排行榜系统)
例如:
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()
这里我根据数据库中的数据进行计算。 当涉及到排序时,我希望它为他们分配一个排名,然后将其保存到相应用户名下的数据库中。
谁能帮助我,我的截止日期是几个月后,我不知道该怎么做。
谢谢,安迪
我不知道数据库部分是如何关联的,但是回答你的排序问题...
首先,您需要根据需要将所有值增加 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 版本更具可读性,尤其是在降序排序方面。