Как найти ключевое слово в разложенной строке на swift? - PullRequest
0 голосов
/ 22 апреля 2020

При попытке создать чат-бота мне удалось разложить предложение, но я не знаю, как проверить, есть ли ключевое слово (в моих массивах) моего кода:

var array1 = ["dog", "cat", "bird"]     //my arrays "key words"
var array2 = ["wolf", "sheep", "pig"]
var array3 = ["horse", "frog", "bear"]
var sentence = "" // This would be whatever we write in the text field

let random = Int.random(in: 0...2) 

if random == 0 {
    sentence = "I like my dog"
}
else if random == 1 {
    sentence = "I like my pig"
}
else if random == 2 {
    sentence = "I like my horse"
}

let result = sentence.split(separator: " ") //this make the decomposition of the sentence
print(result)

Тогда я попытался проверить, было ли ключевое слово, но оно не будет работать, вот что я попробовал:

for counter in 0...array1.count-1 {   
    if result == array1[counter] {
        print("cool!")
    }
}

это дает мне: двоичный оператор '==' не может быть применен к операндам типа '[String .SubSequence] '(он же' Array ') и' String '

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Лично я бы просто конвертировал каждое слово из вашего предложения в String.

let words = sentence.split(separator: " ").map { String($0) }

И использовали наборы вместо массивов:

var keywords1: Set = ["dog", "cat", "bird"]     //my arrays "key words"
var keywords2: Set = ["wolf", "sheep", "pig"]
var keywords3: Set = ["horse", "frog", "bear"]

...

if !keywords1.isDisjoint(with: words) {
   print("Cool!")
}

Потому что с наборами гораздо проще проверить на пересечение.

0 голосов
/ 22 апреля 2020

result - это массив, а array1[counter] - это строка; Вы не можете сравнить массив со строкой, вы можете сравнить строку / подстроку со строкой / подстрокой или массив с массивом. Вы можете сравнить result == array1 или result[x] == array[y], где x и y являются индексами массивов. Если вы хотите проверить, находится ли строка в массиве, вы можете вызвать .contains(...) для массива, см. документация . Тем не менее, поскольку ваш результирующий массив является массивом подстрок, вы должны убедиться, что ваши тестовые массивы также:

let array1 = ["dog", "cat", "bird"] as [Substring]
// ...
for word in array1 {
    if result.contains(word) { print("Cool") }
}
...