Что нового

Сравнить определенную колонку двух разномерных массивов и записать в новый массив

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Доброго времени суток. Нужно сравнить два разноразмерных массива: одномерный и четырехмерный допустим первую колонку. Результат записать в новый массив. При этом, новый массив должен быть равен числом строк первому, а колонками и их значению во втором. И если во втором массиве значение из первой колонки не совпадает значениям из первого, то дописать новый текст в новом массиве.
Пробую так:
Код:
#include <Array.au3>

Global  $array2[0][4], $array3[0][4]
Global $array1[]=[1,3,5,7,9]
_ArrayAdd($array2, 1 & '|' & 01 & '|' & 'ang1' & '|' & 'rus1')
_ArrayAdd($array2, 3 & '|' & 00 & '|' & 'ang2' & '|' & 'rus2')
_ArrayAdd($array2, 5 & '|' & 06 & '|' & 'ang3' & '|' & 'rus3')
_ArrayAdd($array2, 9 & '|' & 09 & '|' & 'ang4' & '|' & 'rus4')
_ArrayAdd($array2, 10 & '|' & 10 & '|' & 'ang5' & '|' & 'rus5')
_ArrayAdd($array2, 11 & '|' & 11 & '|' & 'ang6' & '|' & 'rus6')
_ArrayAdd($array2, 12 & '|' & 12 & '|' & 'ang7' & '|' & 'rus7')

_ArrayDisplay($array1)
_ArrayDisplay($array2)

For $j = 0 To UBound($array1)-1
   For $k = 0 To UBound($array2)-1
Select
         Case $array1[$j] = $array2[$k][0]
          $kSTR = $array2[$j][0]& '|'  & $array2[$j][1] & '|'  & $array2[$j][2] & '|'  & $array2[$j][3]
            If StringStripWS($kSTR, 8) <> '' Then _ArrayAdd($array3, $kSTR)
      Case $array1[$j] <> $array2[$k][0]
           $kSTR = $array2[$j][0] & '|'  & $array2[$j][1] & '|'  & 'rezerv' & '|' & 'rezerv2'
           If StringStripWS($kSTR, 8) <> '' Then _ArrayAdd($array3, $kSTR)
  Case Else
     $kSTR=''
EndSelect
Next
Next

_ArrayDisplay($array3, 'array3')
: ниже то, что хочется получить
Global $array3[0][4]
_ArrayAdd($array3, 1 & '|' & 01 & '|' & 'ang1' & '|' & 'rus1')
_ArrayAdd($array3, 3 & '|' & 00 & '|' & 'ang2' & '|' & 'rus2')
_ArrayAdd($array3, 5 & '|' & 06 & '|' & 'ang3' & '|' & 'rus3')
_ArrayAdd($array3, 7 & '|' & 07 & '|' & 'rezerv' & '|' & 'rezerv2')
_ArrayAdd($array3, 9 & '|' & 09 & '|' & 'ang4' & '|' & 'rus4')

_ArrayDisplay($array3, 'array3new')

Возможно я выбрал не тот алгоритм сравнения. Но тогда какой?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Создать два одномерных и сравнить
 
Автор
D

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Создать два одномерных и сравнить
Честно говоря не понимаю смысл в этом. Ну сделаю вот так:
Код:
For $j = 0 To UBound($array1)-1
   For $k = 0 To UBound($array2)-1

Select
         Case $array1[$j] = $array2[$k][0]
          $kSTR = $array2[$k][0]
            If StringStripWS($kSTR, 8) <> '' Then _ArrayAdd($array3, $kSTR)
         Case $array1[$j] <> $array2[$k][0]
           $kSTR = $array2[$k][0]
           If StringStripWS($kSTR, 8) <> '' Then _ArrayAdd($array3, $kSTR)

  Case Else
     $kSTR=''
EndSelect

Next
Next
$kALL = _ArrayUnique($array3)
_ArrayDelete($kALL,0)
_ArrayDisplay($array3, 'одномерный')
_ArrayDisplay($kALL, 'сортировка одномерного')

Он хорошо составит нужный одномерный массив. Как его сделать 4-х мерным и с нужными значениями?
Сообщение автоматически объединено:

Создать два одномерных и сравнить
Добавил дополнительную проверку. Почти получилось. Исходил из мысли, что шаг между найденными равен числу строк второго массива
Код:
#include <Array.au3>

Global  $array2[0][4], $array3[0][4], $array31[0]
Global $array1[]=[1,2,3,5,7,9]

_ArrayAdd($array2, 1 & '|' & 01 & '|' & 'ang1' & '|' & 'rus1')
_ArrayAdd($array2, 3 & '|' & 00 & '|' & 'ang2' & '|' & 'rus2')
_ArrayAdd($array2, 5 & '|' & 06 & '|' & 'ang3' & '|' & 'rus3')
_ArrayAdd($array2, 9 & '|' & 09 & '|' & 'ang4' & '|' & 'rus4')
_ArrayAdd($array2, 10 & '|' & 10 & '|' & 'ang5' & '|' & 'rus5')
_ArrayAdd($array2, 11 & '|' & 11 & '|' & 'ang6' & '|' & 'rus6')
_ArrayAdd($array2, 12 & '|' & 12 & '|' & 'ang7' & '|' & 'rus7')

For $j = 0 To UBound($array1)-1
   For $k = 0 To UBound($array2)-1
Select
         Case $array1[$j] = $array2[$k][0]
           $kSTR = $array2[$k][0] & '|'  & $array2[$k][1] & '|'  & $array2[$k][2] & '|'  & $array2[$k][3]
            If StringStripWS($kSTR, 8) <> 0 Then _ArrayAdd($array3, $kSTR)
      Case $array1[$j] <> $array2[$k][0] And $k <> Mod($k, UBound($array2)-1)
            $kSTR = $array1[$j] & '|'  & 'rezerv' & '|'  & 'rezerv1' & '|'  & 'rezerv2'
           If StringStripWS($kSTR, 8) <> '' Then _ArrayAdd($array3, $kSTR)
  Case Else
     $kSTR=''
      EndSelect

Next
Next
_ArrayDisplay($array3, 'простая сортировка')
$kALL = _ArrayUnique($array3)
_ArrayDelete($kALL,0)
_ArrayDisplay($array3, 'одномерный')
_ArrayDisplay($kALL, 'сортировка одномерного')
 
Последнее редактирование:
Верх