我的数据库里有一个名字列表,我需要按字母顺序排序但是,我需要先显示希腊字母,然后是拉丁字母例如,我有:

[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"]

10-08 04:40