Что нового

Как перебрать массив данных

ArgoNaft

Новичок
Сообщения
129
Репутация
0
Есть функция в Autoit например как в PHP foreach для полного перебора массива?
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323
Viktor1703,
Интересно,
Код:
For $aElement In $aTest
;...
работает быстрее, чем
Код:
For $i = 0 To Ubound($aTest) -1
;...
При 1000000 элементов на ~0,1 сек. :scratch:
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
madmasles, тоже заметил, иногда использую его для нахождения чего либо в массиве, по мне так он проще, не нужно узнавать размер массивов с помощью Ubound(), иногда пишу мелкие скрипты на VBS и там в основном такой способ и используется для перебора правда объектов типа:

Код:
For Each Var in objVar.Collections
    WScript.Echo Var.Name
Next
 

asdf8

Скриптер
Сообщения
564
Репутация
152
madmasles [?]
Интересно,
For $aElement In $aTest
работает быстрее, чем
For $i = 0 To Ubound($aTest) -1
При 1000000 элементов на ~0,1 сек.

У меня все наоборот, пустой цикл For To работает раз в 30 быстрее, чем For In (для 1000000 элементов)
Код:
Dim $aTest[1000000]

$begin = TimerInit()
For $aElement In $aTest
Next
ConsoleWrite('->' & TimerDiff($begin) & @CRLF)

$begin = TimerInit()
For $i = 0 To Ubound($aTest) -1
Next
ConsoleWrite('->' & TimerDiff($begin) & @CRLF)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,323

asdf8

Скриптер
Сообщения
564
Репутация
152
madmasles

Для корректности, нужно все-таки пустой цикл сравнивать.
Видимо результаты от архитектуры ЦП зависят.
 
Автор
A

ArgoNaft

Новичок
Сообщения
129
Репутация
0
а вот foreach ($arr as $key => $arr_element){}
$key - а как получить номер массива который я в данный момент в переборе обрабатываю?
 
Автор
A

ArgoNaft

Новичок
Сообщения
129
Репутация
0
ну это как то костыльно, а если идентификатор элемента в массиве будет не цифрой?
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
В одномерном он всегда будет цифрой, впрочем и в любом другом.

Код:
Dim $aTest[3][2] = [['id_1', 1], ['id_2', 2], ['id_3', 3]]

For $i = 0 To Ubound($aTest) -1
	MsgBox(0, '', 'ID: ' & $aTest[$i][0] & @CRLF & 'Value: ' & $aTest[$i][1])
Next
 
Автор
A

ArgoNaft

Новичок
Сообщения
129
Репутация
0
Прошу прощения, ноя думал что в autoit можно ключам задавать любое значение даже строковое, а оказалось нет
$arr = [masha][saha]
$arr = [lena][vany]
....
ну и конечно тогда надобность в foreach отпадает
 
Верх