Member 13360042 Ответов: 1

Как переместить целочисленные значения в два разных новых массива?


Привет,
У меня есть пять (5) различных массивов с целочисленными значениями следующим образом:

Dim group1 As Integer = {10, 12, 21}
Dim group2 As Integer = {31, 32, 33}
Dim group3 As Integer = {11, 12, 13}
Dim group4 As Integer = {43, 51}
Dim group5 As Integer = {11, 65}


Теперь вышеприведенные значения являются динамическими для каждой записи, связанной с одним человеком, но моя база данных содержит тысячи людей.
Правила:
1. в первом массиве group1 я переношу все значения в другой новый массив, назовем его CombinedArray, так что у меня будет {10, 12, 21}.
2. во втором массиве group2 я перемещаю только первые два самых высоких значения в один и тот же CombinedArray, так что теперь у меня будет {10, 12, 21, 33, 32}, наименьшее значение {31} перемещается в другой новый массив, назовем его AllArrays {31}
3. в третьем массиве group3 я сортирую и беру только 1 самый высокий массив и перемещаю его в CombinedArray, чтобы он стал {10, 12, 21, 33, 32, 13}. Остальные значения из этого массива перемещаются в AllArrays {31, 11, 12}
4. Затем я перемещаю все значения в массиве group4 и массиве group5 в AllArrays, чтобы они теперь выглядели как {31, 11, 12, 43, 51, 11, 65}. Примените сортировку к этой группе и возьмите только 1 самое высокое значение; (65) и переместите его в CombinedArray, чтобы получить {10, 12, 21, 33, 32, 13, 65}.
5. Перебрать и просуммировать значения этого CombinedArray. Вот и все.
Я новичок в VB и массивах. Может ли кто-нибудь там помочь.
Спасибо.

Что я уже пробовал:

Я могу сортировать по убыванию это как показано ниже;

Sort array in descending order: 
Private Sub Button8_Click(sender As Object, e As EventArgs) Handles Button8.Click
        Dim array() As Integer = {3, 5, 200, 1}
        Dim maxPos As Integer
        Dim firstI As Integer
        While firstI <= UBound(array)
            For i = firstI To UBound(array)
                If array(i) > array(maxPos) Then
                    maxPos = i
                End If
            Next
            Dim largestNumber As Integer = array(maxPos)
            array(maxPos) = array(firstI)
            array(firstI) = largestNumber
            firstI = firstI + 1
            maxPos = firstI
            'Console.WriteLine(largestNumber)
            MessageBox.Show(largestNumber)
            ListBoxNumbers.Items.Add(largestNumber)
        End While
    End Sub

1 Ответов

Рейтинг:
12

Maciej Los

Чтобы иметь возможность увеличить размер массива, не теряя исходных значений, вы должны вызвать Redim Preserve ArrayName(NewSize). Видеть: Массивы в Visual Basic | Microsoft Docs[^]

Чтобы отсортировать массив целых чисел в порядке возрастания, используйте Массив.Сортировка[^]
Для сортировки массива целых чисел в порядке убывания используйте Array.Sort и затем Массив.Обратный[^].

Вот небольшой фрагмент кода, который вы можете использовать для копирования данных между groupX массив и CombinedArray и Allarray:

Dim CopyNoOfElements = Sub(ByRef SrcList AS Integer(), ByVal NoOfEle As Integer, ByRef DstList AS Integer())
        Dim j As Integer = DstList.Length + NoOfEle -1
        Redim Preserve DstList(j)
        For i As Integer = 1 To NoOfEle
            DstList(j+i-NoOfEle) = SrcList(i-1)
        Next
    End Sub

Dim CombinedArray As Integer() = New Integer(){}
Dim AllArrays As Integer() = New Integer(){}
'group1
Console.WriteLine("Processing group1: ({0})" ,String.Join(";", group1))
CopyNoOfElements(group1, group1.Length, CombinedArray)
Console.WriteLine("CombinedArray: ({0})" ,String.Join(";", CombinedArray))
Console.WriteLine("AllArrays: ({0})" ,String.Join(";", AllArrays))
Console.WriteLine()
'group2
Console.WriteLine("Processing group2: ({0})" ,String.Join(";", group2))
Array.Sort(group2)
Array.Reverse(group2)
CopyNoOfElements(group2, 2, CombinedArray)
Console.WriteLine("CombinedArray: ({0})" ,String.Join(";", CombinedArray))
Array.Sort(group2)
CopyNoOfElements(group2, group2.Length-2, AllArrays)
Console.WriteLine("AllArrays: ({0})" ,String.Join(";", AllArrays))
Console.WriteLine()


;)

заключительное Примечание:
Вам действительно нужно работать с массивами? Вы должны работать над классами и списком классов. Это то, что мы называем: сила ООП[^]!


Member 13360042

Привет, Мацей Лос, спасибо за ответ; вы предлагаете мне сделать это с помощью классов и списка классов; не могли бы вы продемонстрировать мне, как я могу достичь этого, используя приведенный выше пример. Предположим, что я получаю данные в массивах из столбца в таблице базы данных. Спасибо.

Maciej Los

Всегда пожалуйста.
Перейдите по ссылке ниже OOP чтобы получить более подробную информацию о классах программирования и списке классов.