在Rails 3中,如何使用特殊字符对字符串数组进行排序。
我有:
[Água, Electricidade, Telefone, Internet, Televisão, Gás, Renda]
然而,当我在数组sort
上调用Água
时,会将其发送到数组的末尾。
答案 0 :(得分:2)
这是我的方法:
class String
def to_canonical
self.gsub(/[áàâãä]/,'a').gsub(/[ÁÀÂÃÄ]/,'A')
end
end
['Água', 'Electricidade', 'Telefone', 'Internet', 'Televisão', 'Gás', 'Renda'].sort {|x,y| x.to_canonical <=> y.to_canonical}
这证明对其他正则表达式也很有用,to_canonical方法可以用最适合你的方式实现,在这个例子中只是覆盖了那2个正则表达式。
希望这种替代方案有所帮助。 :)
答案 1 :(得分:1)
我遇到同样问题时使用的方法(取决于 iconv gem):
require 'iconv'
def sort_alphabetical(words)
# caching and api-wrapper
transliterations = {}
transliterate = lambda do |w|
transliterations[w] ||= Iconv.iconv('ascii//ignore//translit', 'utf-8', w).to_s
end
words.sort do |w1,w2|
transliterate.call(w1) <=> transliterate.call(w2)
end
end
sorted = sort_alphabetical(...)
另一种方法是使用sort_alphabetical gem。