Тема: AHK: Проверка вхождения в массив
Часто вместо массивов используется объединение всех переменных в одну строку.
Проверить наличие переменной в таком "массиве" несложно: IfInString, переменная, массив.
Также можно написать (x ~= "MyRegExp1|MyRegExp2|MyRegExp3").
Можно ли так же лаконично проверять это в настоящих массивах?
Пока не придумал ничего лучше, чем написать самописную функцию:
Array:=[1, 5, 7], x:=3, y:=5
MsgBox % indexOf(x, Array) " | " indexOf(y, [8, 5, 0, 5], 3)
; Возвращает индекс первого вхождения значения в массиве.
; Индекс массива, с которого начинается поиск. Если параметр fromIndex опущен, то поиск начинается с индекса 1.
indexOf(var, Arr, fromIndex:=1) {
Loop % Arr.MaxIndex() - fromIndex + 1
If (var = Arr[A_Index + fromIndex - 1])
Return A_Index + fromIndex - 1
Return false
}
В js у массивов есть метод indexOf(var), в php есть ф-ия in_array(x, Array).
А это питон:
if 'a' in ['a','b','c']:
print "YES"
else:
print "NO"
Круто, да?
Я постоянно встречаю в чужих скриптах разные конструкции, склеивающие список значений в одну строку, затем парсящие эту строку (бр-р-р), и сам иногда пишу код вида (x=a || x=b || ... || x=e). Хотелось бы делать это красиво и просто, такие дела.