我的数据库里有一个名字列表,我需要按字母顺序排序但是,我需要先显示希腊字母,然后是拉丁字母例如,我有:
[Jale, Βήτα, Άλφα, Ben]
我要这样点:
[Άλφα, Βήτα, Ben, Jale]
如有任何建议,将不胜感激:)
最佳答案
我喜欢在IRB玩来解决这些问题。这里有一种方法你可以找到这个解决方案首先,我们将定义测试数组:
>> names = %w{Jale Βήτα Άλφα Ben}
=> ["Jale", "Βήτα", "Άλφα", "Ben"]
为了解决这个问题,我们首先将数组转换为两个元组,其中包含一个标志,指示名称是否为希腊语,然后是名称本身。我们希望标志是可排序的,所以我们将首先找到只匹配拉丁字符的正则表达式,并将其强制为字符串。
>> names.map{|name| [(name =~ /^\w+$/).to_s, name]}
=> [["0", "Jale"], ["", "Βήτα"], ["", "Άλφα"], ["0", "Ben"]]
然后我们将对2元组进行排序:
>> names.map{|name| [(name =~ /^\w+$/).to_s, name]}.sort
=> [["", "Άλφα"], ["", "Βήτα"], ["0", "Ben"], ["0", "Jale"]]
我们现在有一个排序顺序,先是希腊名字,然后是拉丁名字我们可以将此缩短为我们的解决方案:
>> names.sort_by{|name| [(name =~ /^\w+$/).to_s, name]}
=> ["Άλφα", "Βήτα", "Ben", "Jale"]