Как отсортировать двухмерный массив

#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