2012-06-28 1 views
2

У меня есть массив строк, выглядит следующим образом:метод рубин, чтобы найти строку в массив строк

[noindex,nofollow] 

или [ «индекс», «следовать», «все»]

Я называю эти «tags_array». У меня есть метод, который выглядит следующим образом:

return true if self.tags_array.to_s.include? "index" and !self.tags_array.to_s.include? "noindex" 

Но я думаю, что есть более разумный способ, чтобы запустить этот код, чем взять на себя весь массив и преобразовать его в строку.

Проблема заключается в том, что информация поступает как массив элементов и в другое время она входит в массив строк.

Любые предложения по умному способу сделать это?

+1

FYI, если вы используете методы типа 'include?' в условном выражении с 'и' или 'или' th en, вы должны поместить аргумент 'include? 'в круглые скобки, например' .include? («index»), иначе вы могли бы отказаться от условия. –

+0

Спасибо, что упомянули об этом! Я ценю это. –

ответ

4

Вам не пришлось бы преобразовывать ваш массив в строку, поскольку массив содержит метод include?.

tags_array.include?("index") #=> returns true or false 

Однако, как вы уже сказали, иногда информация поступает как массив одной строки. Если единственный элемент String этого массива содержит слова, которые всегда разделены пробелом, вы можете превратить String в массив с помощью метода split.

tags_array[0].split.include?("index") if tags_array.size == 1 

Или, если слова всегда разделяются запятыми:

tags_array[0].split(",").include?("index") if tags_array.size == 1 

EDIT:

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

tags_array[0].split(/[^a-zA-Z]/).include?("index") if tags_array.size == 1 
+0

Ага, используя метод разделения. Мне очень нравится эта стратегия. Похоже на победителя. Благодарим за ваше предложение! –

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