我正在使用以下代码读取高分文件,首先写入分数,将玩家姓名写入下一行,如果没有写入3分,则显示前3分或更少分数文件。高分显示应该将分数排在最高的第一位,这是该程序试图实现的内容。
Array.sort()没有做该死的事。事实上,该程序甚至没有像它应该那样反转阵列。我用这种方式测试了array.sort(),明确给出了名称和得分数组,它运行正常。我想也许它仍然是以字符串的形式读取数据,即使它已经声明了,但是当我将数组类型更改为Integer时,它会将小数点数舍入,所以我很确定它不是那样的。
我不知道为什么从文件中读取数据会改变它的排序方式。我的老师也不明白发生了什么。有谁知道这里发生了什么?
Imports System.IO
Public Class Form2
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim fileLines() = File.ReadAllLines(Application.StartupPath & "/../../Resources/highscores.txt")
Dim highscores() As Double = {}
Dim names() As String = {}
'For some reason vb doesn't have a function to add items to arrays.
'Lists have this capability, but if I used a list I couldn't use array.sort
For i As Integer = 0 To fileLines.Length() - 1
If (i Mod 2 = 0) Then
'highscores.add(fileLines(i))
Array.Resize(highscores, highscores.Length + 1)
highscores(highscores.Length - 1) = fileLines(i)
Else
'names.add(fileLines(i))
Array.Resize(names, names.Length + 1)
names(names.Length - 1) = fileLines(i)
End If
Next
Array.Sort(highscores, names)
highscores.Reverse()
names.Reverse()
If highscores.Length() > 0 Then
Label1.Text = Str(highscores(0)) + " " + names(0)
End If
If highscores.Length() > 1 Then
Label2.Text = Str(highscores(1)) + " " + names(1)
End If
If highscores.Length() > 2 Then
Label3.Text = Str(highscores(2)) + " " + names(2)
End If
End Sub
End Class
答案 0 :(得分:1)
highscores.Reverse()不起作用,因为它返回反向数组而不反转现有数组。要在适当的位置反转数组,请使用Array.Reverse(highscores)。
此外,Array.Sort()在我的示例中运行良好,所以很可能你的highscores.txt中有一些奇怪的东西。你能给出一个这个文件的例子。
同样在每次迭代时调整数组大小是个坏主意,因为它很慢并浪费了大量内存。你最好使用List。列表可以使用linq轻松排序,如highscores.OrderBy(i => i)
(c#语法)。