ruby数组中的自定义排序

Aas*_*h P 1 ruby ruby-on-rails

我有一个非常具体的要求.有三个或四个衬垫解决方案.我需要一个衬垫解决方案.

假设我有一个像这样的数组:

[["Andorra", "Andorra"], ["United Arab Emirates", "United Arab Emirates"], 
 ["Afghanistan", "Afghanistan"], ["Antigua & Barbuda", "Antigua & Barbuda"], 
 ["Anguilla", "Anguilla"], ["Albania", "Albania"], ["Armenia", "Armenia"], 
 ["Angola", "Angola"]]
Run Code Online (Sandbox Code Playgroud)

我希望["安圭拉","安圭拉"]作为我的第一个元素,而其他的则按降序排列.

有没有办法实现这个目标?(如果可能,一个班轮)

tok*_*and 6

利用数组定义的字典顺序,并按所需条件对输入进行排序:

countries.sort_by { |s, s2| [s == "Anguilla" ? 1 : 0, s] }.reverse
#=> [["Anguilla", "Anguilla"], ..., ["Afghanistan", "Afghanistan"]]
Run Code Online (Sandbox Code Playgroud)

@Sergio建议Enumerable#sort用来避免reverse.IMO它的声明性不如前者,但是对于记录来说,它的外观如下:

countries.sort { |(s1, _), (s2, _)| s1 == "Anguilla" ? -1 : s2 <=> s1 }
#=> [["Anguilla", "Anguilla"], ..., ["Afghanistan", "Afghanistan"]]
Run Code Online (Sandbox Code Playgroud)