2015-11-08 3 views
2

я следующий код:Как проверить, если строка содержится в массиве в AutoHotKey

ignored := [ "Rainmeter.exe", "Nimi Places.exe", "mumble.exe" ] 

a := ignored.HasKey("mumble.exe") 
MsgBox,,, %a% 

возвращает 0, даже если строка явно присутствует в массиве.

Как проверить, существует ли строковое значение в массиве?

PS: Я также пробовал if var in, который дает те же результаты.

ответ

3

Вы не можете использовать только одну команду. Такая функциональность не реализована в AHK_L с 1.1.22.3.

Вы должны либо определить свои собственные функции

hasValue(haystack, needle) { 
    if(!isObject(haystack)) 
     return false 
    if(haystack.Length()==0) 
     return false 
    for k,v in haystack 
     if(v==needle) 
      return true 
    return false 
} 

или использовать некоторые фантазии обходной путь:

ignored := { "Rainmeter.exe":0, "Nimi Places.exe":0, "mumble.exe":0 } 
msgbox, % ignored.HasKey("mumble.exe") 

Это позволит создать ассоциативный массив и поставить свои значения в качестве ключей (значения являются здесь установлено 0), поэтому имеет смысл использовать .HasKey().

+1

Благодарим за ответ. Функция 'hasValue' - приятное решение. Я немного удивлен, что эта функциональность еще не является частью AHK. – monnef

Смежные вопросы