Сортировка 2 массивов рядом - PullRequest
0 голосов
/ 18 января 2012

В основном у меня есть программа, которая извлекает данные и анализирует их, что нормально, поэтому она начинается с:

11: 981,8, что равняется ноябрю 981,8, и теперь я разделил «ноябрь» и «981,8» на 2 разных массива, с другими похожими данными, теперь мне нужно уметь сортировать массив в возрастающем или убывающем порядке, но в такте, ноябрь и 981,8 рядом в окне списка.

Мой текущий код:

Private Sub sortData(ByVal strYear As String, ByVal strSort As String)
    lbDispData.Items.Clear()

    Dim strData As String = My.Settings.usage2011
    Dim arrRawData() As String
    Dim arrMonth As New ArrayList
    Dim arrKilo As New ArrayList

        arrRawData = strData.Split("_")

        For Each strUsage As String In arrRawData
            Dim arrSmall As String()
            arrSmall = strUsage.Split(":")
            arrSmall(0) = MonthName(arrSmall(0))

            arrMonth.Add(arrSmall(0))
            arrKilo.Add(arrSmall(1))
        Next

        If strSort = 0 Then
            'Sort in ascending order
        ElseIf strSort = 1 Then
            'Sort in descending order
        End If
End Sub

Или, если возможно, есть лучший способ?

РЕДАКТИРОВАТЬ: просто чтобы упомянуть, есть еще много значений, а не только ноябрь и 981,8, будет, например, декабрь и 128,1, январь и 191,1 и т. Д.

Ответы [ 2 ]

2 голосов
/ 18 января 2012

Не используйте два массива. Используйте один массив или Список , и каждый элемент в массиве должен быть либо экземпляром пользовательского класса, который будет иметь свойства Month и Kilo, либо экземпляром Tuple .

Затем вы можете сортировать по любому желаемому свойству, и вам не нужно беспокоиться о сохранении связанной информации.

Чтобы создать кортеж для предмета, используйте Tuple.Create:

Dim myTuple = Tuple.Create(monthValue, kiloValue)

Затем вы можете получить доступ к значениям из кортежа, используя Item1, Item2 и т. Д.

Dim month = myTuple.Item1
Dim kilo = myTuple.Item2
0 голосов
/ 18 января 2012

Существуют два способа хранения данных такого типа: массив структур или структура массивов. Ваша реализация, в настоящее время, является последней. Как вы подозреваете, первое обычно предпочитается в языках, которые предоставляют доступ к объектам и пользовательским типам.

Чтобы решить эту проблему, используя представление данных массива структур, вы определите свой собственный тип - например, вы можете назвать его MonthFloatPair или что-то более подходящее для вашего приложения, или вы можете просто использовать встроенный тип это соответствует вашим потребностям - и иметь один массив типа MonthFloatPair. Чтобы добавить MonthFloatPair, вы должны проанализировать строку точно так же, как сейчас, а затем просто назначить месяц одному члену MonthFloatPair, а номер (килограмм?) Другому. Тогда все, что вам нужно сделать, это написать метод, обеспечивающий сравнение порядка объектов MonthFloatPair (во всяком случае, это возможно в vb.net), а затем отсортировать этот массив в обычном порядке, как вам захочется.

Чтобы решить эту проблему с помощью представления данных со структурой массивов, вы делаете именно то, что делаете сейчас. Для сортировки сортируйте как обычно для массива, по которому вы сортируете, с одним предупреждением: каждый раз, когда вы меняете положение элемента массива, на котором вы основываете сортировку (например, путем замены в O (n ^ 2) сортирует или помещает в новый массив, как в MergeSort), вам необходимо таким же образом переместить соответствующий (тот же индекс) элемент в другой массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...