2015-10-24 3 views
0

Для страницы с рекордами в моей игре я беру от текстового файла от 1 до 5 наивысших значений, а затем отображаю их в текстовом поле, но у меня возникает проблема с тем, что мой код видит каждую цифру как отдельный номер, примером является то, что 43 будет считаться как 4 и 3. Это означает, что моя страница с высоким уровнем никогда не показывает оценку выше 9. Текстовый файл находится в резервных копиях, если программа содержит новый номер в каждой строке.Заказ номеров с наивысшим наименьшим

Как исправить это?

Код ниже.

'Part 1: Determine Resource File Path based on Debugging mode or Published mode 
Dim ResourceFilePathPrefix As String 
If System.Diagnostics.Debugger.IsAttached() Then 
    'In Debugging mode 
    ResourceFilePathPrefix = System.IO.Path.GetFullPath(Application.StartupPath & "\..\..\resources\") 
Else 
    'In Published mode 
    ResourceFilePathPrefix = Application.StartupPath & "\resources\" 
End If 

'Part 2: Write the text file 
Dim lines() As String = File.ReadAllLines(ResourceFilePathPrefix & "scores.txt") 
Array.Sort(lines) 
Array.Reverse(lines) 
P1Score.Text = lines(0) 
P2Score.Text = lines(1) 
P3Score.Text = lines(2) 
P4Score.Text = lines(3) 
P5Score.Text = lines(4) 
+0

Ваша первая ошибка состоит в том, чтобы верить, что список номеров хранятся в виде строк будет производить тот же результат в виде списка номеров, сохраненных в виде чисел при сортировке. –

+2

Возможный дубликат [Сортировка элементов списка в численном выражении в VB] (http://stackoverflow.com/questions/2157383/sorting-listbox-items-numerically-in-vb) – usr2564301

+0

Вы используете 'Sort' для текстовых элементов, так что да, вы получаете то, о чем просите. Сделайте вместо этого массив целых чисел. – usr2564301

ответ

0

Вам необходимо конвертировать баллы в целые числа, прежде чем их можно отсортировать численно в противном случае они будут отсортированы как текст (который, как баллы хранятся в файле).

'Part 2: Write the text file 
Dim lines() As String = File.ReadAllLines(ResourceFilePathPrefix & "scores.txt") 

Dim scores As New System.Collections.Generic.List(Of Integer) 
For Each line As String in lines 
    scores.Add(Convert.ToInt32(line)) 
Next 

scores.Sort() 
scores.Reverse() 

P1Score.Text = scores(0) 
P2Score.Text = scores(1) 
P3Score.Text = scores(2) 
P4Score.Text = scores(3) 
P5Score.Text = scores(4) 

Или с помощью Linq:

'Part 2: Write the text file 
Dim lines() As String = File.ReadAllLines(ResourceFilePathPrefix & "scores.txt") 
Dim scores = lines.Select(Function(x) Convert.ToInt32(x)).OrderByDescending(Function(x) x) 
P1Score.Text = scores(0) 
P2Score.Text = scores(1) 
P3Score.Text = scores(2) 
P4Score.Text = scores(3) 
P5Score.Text = scores(4) 
Смежные вопросы