我有一个非常具体的要求有一个三或四个相同的线性解决方案我需要一个线性解决方案。
假设我有一个数组,比如:

[["Andorra", "Andorra"], ["United Arab Emirates", "United Arab Emirates"],
 ["Afghanistan", "Afghanistan"], ["Antigua & Barbuda", "Antigua & Barbuda"],
 ["Anguilla", "Anguilla"], ["Albania", "Albania"], ["Armenia", "Armenia"],
 ["Angola", "Angola"]]

我想把“[”安圭拉“,”安圭拉“]作为我的第一个元素,其他按降序排列。
有什么办法可以做到这一点吗(如有可能,一个衬垫)

最佳答案

利用数组定义的字典顺序,并按期望的标准对输入进行排序:

countries.sort_by { |s, s2| [s == "Anguilla" ? 1 : 0, s] }.reverse
#=> [["Anguilla", "Anguilla"], ..., ["Afghanistan", "Afghanistan"]]

@塞尔吉奥建议使用Enumerable#sort来避免reverseIMO的声明性比前者要弱,但事实上,这就是它的样子:
countries.sort { |(s1, _), (s2, _)| s1 == "Anguilla" ? -1 : s2 <=> s1 }
#=> [["Anguilla", "Anguilla"], ..., ["Afghanistan", "Afghanistan"]]

10-07 17:53