如何通过引用变量alpha的每个字母对重音单词数组进行排序。以下代码仅引用第一个字母的字母,因此我无法获得“ĝusti
”,“ĝusti vin
”,“ĝuspa
”以正确排序。
我需要代码来对这样的单词进行排序:
["bonan matenon", "ĉu vi parolas esperanton","ĝuspa", "ĝusti", "ĝusti vin", "mi amas vin", "pacon"]
def alphabetize(phrases)
alpha = "abcĉdefgĝhĥijĵklmnoprsŝtuŭvz".split(//)
phrases.sort_by { |phrase|
alpha.index(phrase[0])
}
end
alphabetize(["mi amas vin", "bonan matenon", "pacon", "ĉu vi parolas esperanton", "ĝusti", "ĝusti vin","ĝuspa"])
答案 0 :(得分:8)
您可以像这样使用i18n gem:
# encoding: UTF-8
require 'i18n'
I18n.enforce_available_locales = false
a = ["bonan matenon", "ĉu vi parolas esperanton","ĝuspa", "ĝusti", "ĝusti vin", "mi amas vin", "pacon"]
b = a.sort_by { |e| I18n.transliterate e }
puts b
给出
bonan matenon
ĉu vi parolas esperanton
ĝuspa
ĝusti
ĝusti vin
mi amas vin
pacon
答案 1 :(得分:7)
修复非常明显:不是只返回第一个字符的索引,而是将所有字符映射到各自的索引:
def alphabetize(phrases)
alpha = "abcĉdefgĝhĥijĵklmnoprsŝtuŭvz".chars
phrases.sort_by do |phrase|
phrase.chars.map { |c| alpha.index(c) }
end
end
puts alphabetize(["mi amas vin", "bonan matenon", "pacon", "ĉu vi parolas esperanton", "ĝusti", "ĝusti vin","ĝuspa"])
输出:
bonan matenon
ĉu vi parolas esperanton
ĝuspa
ĝusti
ĝusti vin
mi amas vin
pacon
为了加速索引查找,您可以使用哈希:
alpha = "abcĉdefgĝhĥijĵklmnoprsŝtuŭvz".each_char.with_index.to_h
#=> {"a"=>0, "b"=>1, "c"=>2, ..., "v"=>26, "z"=>27}
并致电alpha[c]
而非alpha.index(c)