Что нового

[Массивы] Как сравнить два массива и показать отличающиеся элементы?

Tapok

Новичок
Сообщения
204
Репутация
0
Есть ли функция для сравнения двух массивов (с возможностью вывода элементов одного массива, которых нет в другом)?

Кажется, то что надо, получится если использовать две функции:

Код:
_ArrayConcatenate

и
Код:
_ArrayUnique


как удалить из массива повторяющиеся элементы, чтобы итоговый массив был или пустой или с различающимися элементами обоих массивов?
 

InnI

AutoIT Гуру
Сообщения
4,911
Репутация
1,427
Tapok
функция для сравнения двух массивов
Код:
#include <Array.au3>

Global $aArray1[] = [0,1,3,4,5]
Global $aArray2[] = [1,3,4,6,7]

_ArrayDisplay(_ArrayCompare($aArray1, $aArray2))
_ArrayDisplay(_ArrayCompare($aArray2, $aArray1))

Func _ArrayCompare(Const ByRef $a1, Const ByRef $a2)
  If Not IsArray($a1) Or Not IsArray($a2) Then Return
  If UBound($a1, 0) <> 1 Or UBound($a2, 0) <> 1 Then Return
  Local $sUniq = ""
  For $i = 0 To UBound($a1) - 1
    For $j = 0 To UBound($a2) - 1
      If $a1[$i] = $a2[$j] Then ExitLoop
    Next
    If $j = UBound($a2) Then $sUniq &= $a1[$i] & "|"
  Next
  Return StringSplit(StringTrimRight($sUniq, 1), "|", 2)
EndFunc
 
Автор
T

Tapok

Новичок
Сообщения
204
Репутация
0
Inni, спасибо большое, то, что надо! :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
InnI,
А если хотя бы один из массивов, например, двумерный? :smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
InnI,
А теперь первая строка функции не нужна. :smile:
 

InnI

AutoIT Гуру
Сообщения
4,911
Репутация
1,427
должно сравнивать двумерные массивы?
Нет, одномерные.
Двумерные здесь:
 
Верх