Что нового

Поиск нужных значений в массиве

zerobot

Новичок
Сообщения
78
Репутация
0
Добрый день!
У меня есть массив, например:
$Start[1] = 1
$Start[2] = 0
$Start[3] = 1
$Start[4] = 1
$Start[5] = 0

Как мне получить номера значений, в которых он равен 1? (1,3,4)
Просто потом мне понадобиться посчитать количество этих совпадений, и если оно больше заданного придела, то выбрать случайным образом один из них.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Код:
Dim $Start[6] = [6, 1, 0, 1, 1, 0], $count = 0
For $i = 0 To UBound($Start) - 1
  If $Start[$i] = 1 Then
    ConsoleWrite($i)
    $count += 1
  EndIf
Next
ConsoleWrite(@CRLF & "Совпадений " & $count & @CRLF)


Индексы массива начинаются с нуля, т.е. первый элемент массива $Start[0]
 
Автор
Z

zerobot

Новичок
Сообщения
78
Репутация
0
Отличный пример! Это то что мне нужно.
Разрешите задать только ещё один вопрос:
Как заполнить вот этот момент программно
Код:
Dim $Start[6] = [6, 1, 0, 1, 1, 0], $count = 0

"[6, 1, 0, 1, 1, 0]"
Массив $Start у меня заполняется через функцию PixelSearch.
Код:
$Start=PixelSearch(......)

Тогда как оформить ваш пример?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
PixelSearch() возвращает уже готовый массив из двух элементов. В вашем случае это $Start[0] (координата X) и $Start[1] (координата Y). Что вы ещё хотите заполнить?
 
Автор
Z

zerobot

Новичок
Сообщения
78
Репутация
0
Код:
For $i = 0 to $Pixels Step 1
$MousePos = MouseGetPos()
$Find[$i] = PixelSearch($MousePos[0]-$Fovx,$MousePos[1]-$Fovy,$MousePos[0]+$Fovx,$MousePos[1]+$Fovy,$Pixel,$SearchMax)
if IsArray($Find[$i]) = TRUE Then
$Good[$i] = 1
Else
$Good[$i] = 0
EndIf
Next


Я хочу получить номера массива $Good где он равен 1, потом посчитать сколько совпадений. Как в вашем примере, только изменённым под вот этот вариант. Затем, если совпадение больше заданного придела, софт выбирает случайный номер из тех что найдены(1,3 или 4 в нашем примере), подставляет его под $Find (например $Find[4]), смотрит координаты этого пикселя, а затем производит с ним некие действия.

Ваш пример идеально мне подходит. Только как его адаптировать под вот такой случай?
А именно строчку
Код:
Dim $Start[6] = [6, 1, 0, 1, 1, 0], $count = 0
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
zerobot [?]
А именно строчку
Не нужна вам эта строчка (ну, разве что $count = 0 оставить). В приведённом вами коде после выполнения цикла массив $Good[] уже будет заполнен. Ниже подставляете мой код, заменив $Start на $Good.
Код:
For $i = 0 to $Pixels Step 1
  $MousePos = MouseGetPos()
  $Find[$i] = PixelSearch($MousePos[0]-$Fovx,$MousePos[1]-$Fovy,$MousePos[0]+$Fovx,$MousePos[1]+$Fovy,$Pixel,$SearchMax)
  if IsArray($Find[$i]) = TRUE Then
    $Good[$i] = 1
  Else
    $Good[$i] = 0
  EndIf
Next

$count = 0
For $i = 0 To UBound($Good) - 1
  If $Good[$i] = 1 Then
    ConsoleWrite($i)
    $count += 1
  EndIf
Next
ConsoleWrite(@CRLF & "Совпадений " & $count & @CRLF)
 
Верх