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)
我希望["安圭拉","安圭拉"]作为我的第一个元素,而其他的则按降序排列.
有没有办法实现这个目标?(如果可能,一个班轮)
利用数组定义的字典顺序,并按所需条件对输入进行排序:
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)