使用特殊字符对字符串数组进行排序

时间:2011-05-23 15:07:03

标签: ruby-on-rails-3

在Rails 3中,如何使用特殊字符对字符串数组进行排序。

我有:

[Água, Electricidade, Telefone, Internet, Televisão, Gás, Renda]

然而,当我在数组sort上调用Água时,会将其发送到数组的末尾。

2 个答案:

答案 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。