Что нового

[Массивы] Сравнить Массивы

modnik

Знающий
Сообщения
138
Репутация
13
Версия AutoIt: 3.

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

Функцией беруться 4 значения цвета с экрана и записываются в массив(в какойто другой) Дальше, нужно сравнить все элементы из полученного массива с загтовленными и если будет полное совпадение полученого массива с одним из загтовленных то допустим открывается окошко "The end"
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Можно так :
Код:
#include <Array.au3>

Dim $a1[5]=[4,0xDDDDDD,0xDD8080,0x8080AA,0x80DD80]
Dim $a2[5]=[4,0xEEEEEE,0xEE8080,0x8080BB,0x80EE80]
Dim $a3[5]=[4,0xFFFFFF,0xFF8080,0x8080CC,0x80FF80]
Dim $a4[5]=[4,0xCCCCCC,0xCC8080,0x8080DD,0x80CC80]

 Dim $a55[5]=[4,0xCCCCCC,0xCC8080,0x8080DD,0x80CC80]
;Dim $a55[5]=[4,0xDCCCCC,0xCC8080,0x8080DD,0x80CC80]

$sStr1=_ArrayToString( $a1,  1 )
$sStr2=_ArrayToString( $a2,  1 )
$sStr3=_ArrayToString( $a3,  1 )
$sStr4=_ArrayToString( $a4,  1 )

$sStr1_4=$sStr1 & $sStr2 & $sStr3 & $sStr4

$sStr55=_ArrayToString( $a55,  1 ) 

If StringRegExp ( $sStr1_4, $sStr55 , 0 ) Then 
    MsgBox(0,'','Совпадение найдено')
Else   
    MsgBox(0,'','Совпадений нет')
EndIf
 
Автор
M

modnik

Знающий
Сообщения
138
Репутация
13
Код:
#include <Array.au3>



а вот этот модуль надо где то скачивать?
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
modnik сказал(а):
Код:
#include <Array.au3>



а вот этот модуль надо где то скачивать?

Нет Он есть в пакете AutoIT
Достаточно прописать его в начале скрипта так как у меня показано (#include <Array.au3>)
 
Автор
M

modnik

Знающий
Сообщения
138
Репутация
13
Вроде всё понял, переводим массивы в строки и сравниваем их. А можно получить значение с каким именно массивом совпдаает?
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
modnik [?]
А можно получить значение с каким именно массивом совпдаает?

Код:
$array=StringRegExp ( $sStr1_4, $sStr55 , 1 )
_ArrayDisplay ($array,'$array')

Покажет массив совпавших элементов
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Код:
$N = 4;
$M = 5;
Dim $a[$M][$N] = [ _
	[0xFFCCBB, 0xCBCBCB, 0xFFAA00, 0xAFAFAF], _
	[0xCBCBCB, 0xFF8080, 0xA0A0AA, 0xF0F0F0], _
	[0xAAAFFA, 0x101010, 0xFF9090, 0xDDFFDD], _
	[0xBBBBBB, 0xFFFFFF, 0xCCCCCC, 0x808080], _
	[0xABABAB, 0x707070, 0xFF90FF, 0xCCCCCB] _
]
Dim $tmp[$N] = [ _
	0xCBCBCB, _
	0xFF8080, _
	0xA0A0A0, _
	0xF0F0F0 _
]

For $i = 0 to $M - 1
	$ind = 0
	For $j = 0 to $N - 1
		If $a[$i][$j] <> $tmp[$j] Then ExitLoop
		$ind = 1
	Next
	If $ind = 1 Then _
	MsgBox(48, 'The End', 'Coincidence in ' & $i + 1 & 'th array')
Next



Добавлено:
Сообщение автоматически объединено:

В силу достаточной тривиальности задачи, переношу тему в Раздел для новичков
 
Автор
M

modnik

Знающий
Сообщения
138
Репутация
13
а что значит знак "_" и что это за переменая j? вроде это строки и столбцы матрицы, они автоматом присваиваються?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
modnik [?]
а что значит знак "_"
это символ разделения строки. интерпретатор считает, что все строки разделенные между собой символом нижнего подчеркивания на самом деле одна строка. чисто для визуального восприятия.

что это за переменая j? вроде это строки и столбцы матрицы
i и j - это скользящие индексы у матриц/массивов. В AutoIt нет необходимости инициализировать переменные до их использования (если только эта переменная не матрица). используется в цикле для перечисления всех элементов
 

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
modnik [?]
А можно получить значение с каким именно массивом совпдаает?
Или так :
Код:
#include <Array.au3>

Dim $a1[5]=[4,0xDDDDDD,0xDD8080,0x8080AA,0x80DD80]
Dim $a2[5]=[4,0xEEEEEE,0xEE8080,0x8080BB,0x80EE80]
Dim $a3[5]=[4,0xFFFFFF,0xFF8080,0x8080CC,0x80FF80]
Dim $a4[5]=[4,0xCCCCCC,0xCC8080,0x8080DD,0x80CC80]

Dim $a55[5]=[4,0xDDDDDD,0xDD8080,0x8080AA,0x80DD80]
;Dim $a55[5]=[4,0xEEEEEE,0xEE8080,0x8080BB,0x80EE80]
;Dim $a55[5]=[4,0xCCCCCC,0xCC8080,0x8080DD,0x80CC80]
;Dim $a55[5]=[4,0xFFFFFF,0xFF8080,0x8080CC,0x80FF80]

$sStr1= '1 ' & _ArrayToString( $a1,  1 ) 
$sStr2= '2 ' & _ArrayToString( $a2,  1 )
$sStr3= '3 ' & _ArrayToString( $a3,  1 ) 
$sStr4= '4 ' & _ArrayToString( $a4,  1 ) 

$sStr1_4=$sStr1 & $sStr2 & $sStr3 & $sStr4

$sStr55=_ArrayToString( $a55,  1 ) 

$sPattern ='^.*(\d)\s' & $sStr55 & '.*$'
$sRez=StringRegExpReplace ( $sStr1_4, $sPattern, "\1" )
If $sRez=$sStr1_4 Then 
   MsgBox(0,'Инфо','Совпадений не найдено')
Else   
   MsgBox(0,'Инфо','Совпадение найдено в ' & $sRez & '-м массиве')
EndIf



Добавлено:
Сообщение автоматически объединено:

Добавил случай несовпадения
 

Pers__

Новичок
Сообщения
2
Репутация
0
В контексте задачи - есть-ли смысл использовать массивы ?
Как я понял - проще изначально цвета пикселей записывать в строку , а потом сравнивать ?
 
Верх