Как я могу отсортировать этот массив? - PullRequest
0 голосов
/ 08 марта 2012

У меня есть массив headlines, который содержит несколько предложений, например:

headlines = ["I see a tree", "Facebook is slow", "plants need water to grow", "There's an orange", "I think we'll agree"] 
first = headlines[0]
second = headlines[1]
third = headlines[2]

Я использую гем ruby_rhymes, который предоставляет метод #to_phrase.rhymes, который печатает рифмующиеся слова для последнего слова в строке, которую вы ему предоставляете. Теперь, чтобы проверить, рифмуются ли строки массива, я делаю что-то вроде:

> first.to_phrase.rhymes.flatten.join(", ").include?(second.to_phrase.rhymes.flatten.join(", "))
=> false
> second.to_phrase.rhymes.flatten.join(", ").include?(third.to_phrase.rhymes.flatten.join(", "))
=> true

Я хочу сохранить их в текстовом файле, чтобы отсортировать их в массиве, чтобы рифмованные пары следовали друг за другом. Я знаю, чтобы отсортировать строки, если последние 3 символа одинаковы:

headlines.sort! {|a,b|  a[-3,3] <=> b[-3,3] }

Но я не знаю, как сделать, хочу, хочу.

Ответы [ 2 ]

0 голосов
/ 08 марта 2012

Итак, я понял:

headlines.sort_by! { |h| h.to_phrase.rhyme_key }

Это не работает на 100%, но это ошибка словаря, на который опирается гем.

0 голосов
/ 08 марта 2012

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

p headlines.sort {|a,b|  a[-3,3] <=> b[-3,3] }
# => ["Facebook is slow", "There's an orange", "I see a tree", "I think we'll agree", "plants need water to grow"]

"... slow" и "... grow" - единственные неупорядоченные предложения, вызванныебуквами «р» и «о».Простой взлом был бы изменить порядок сравнения следующим образом:

p headlines.sort {|a,b|  a[-3,3].reverse <=> b[-3,3].reverse }
# => ["I see a tree", "I think we'll agree", "There's an orange", "Facebook is slow", "plants need water to grow"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...