#vb.net
#vb.net
Вопрос:
У меня есть двухмерный массив. Я хочу отсортировать массив по второму столбцу по убыванию. Не могли бы вы мне помочь
Dim house_rank(12, 1) As Integer
For h = 1 To 12
house_rank(h - 1, 0) = h
house_rank(h - 1, 1) = h_val(h - 1)
Next
Комментарии:
1. Что делает h_val?
Ответ №1:
Не существует «автоматического» способа сортировки 2D-массива. Если вы хотите сделать это на месте, то вам придется самостоятельно реализовать алгоритм сортировки и просто выполнять это по второму «столбцу» и всякий раз, когда вы перемещаете значение, выполнять ту же операцию и со значением в первом «столбце». Если вы не полны решимости сделать это на месте, вы можете создать два одномерных массива, а затем использовать перегрузку Array.Sort
, которая сортирует два массива на основе значений в одном из них, а затем повторно заполняет исходный массив. Вот метод, который это сделает:
Private Sub SortBySecondColumn(Of T)(matrix As T(,))
Dim upperBound = matrix.GetUpperBound(0)
Dim firstColumn(upperBound) As T
Dim secondColumn(upperBound) As T
'Copy data from 2D array to 1D arrays.
For i = 0 To upperBound
firstColumn(i) = matrix(i, 0)
secondColumn(i) = matrix(i, 1)
Next
'Sort both columns by the second column.
Array.Sort(secondColumn, firstColumn)
'Copy data back from 1D arrays to 2D array.
For i = 0 To upperBound
matrix(i, 0) = firstColumn(i)
matrix(i, 1) = secondColumn(i)
Next
End Sub