Я пытаюсь отсканировать строку необработанного ввода от пользователя и вернуть предложение, состоящее из массива массивов с парами (TOKEN, WORD).Если слово не является частью лексикона, то оно все равно должно вернуть WORD, но установить для TOKEN токен ошибки.
Внутри метода "@@ dictionary.each do | type, list |"Первоначальный оператор if прекрасно работает при построении массива ключей / значений из найденных слов, если для оператора else установлено значение nil.Однако, когда я пытаюсь поместить пары ошибок / слов в массив для слов, не содержащихся в хеше @@ dictionary (то есть тех, которые попадают в остальную часть кода), я получаю 5 отдельных пар в массиве для каждого словачто пользователь ввел, по одному для каждой итерации по каждому ключу для каждого введенного слова.
Есть ли у кого-нибудь идеи, как вернуть в массив только одну пару ошибка / значение вместо одной для каждой из пяти итерацийза каждое слово?
class Lexicon
@@dictionary = {
'direction' => ['north', 'south', 'east', 'west', 'down', 'up', 'left', 'right', 'back'],
'verbs' => ['go', 'stop', 'kill', 'eat'],
'stop words' => ['the', 'in', 'of', 'on', 'at', 'it'],
'nouns' => ['door', 'bear', 'princess', 'cabinet'],
'numbers' => [0..9]
}
stuff = $stdin.gets.chomp
@@words = stuff.split(' ')
def self.scan
result = []
@@words.each do |text_element|
categorized = []
@@dictionary.each do |type, list|
if
list.include?(text_element.downcase)
categorized = [type, text_element]
result.push(categorized)
else
nil
#categorized = ["ERROR", text_element]
#result.push(categorized)
end
end
end
print result
end
Lexicon.scan
end