我有一个包含数字和字母的数组,例如:
newArray = [“1 a”,“1 b”,“2 c”,“2 a”]
我想以一种预期输出的方式对它们进行排序,如下所示:
newArray = [“2 a”,“2 c”,“1 a”,“1 b”]
我想要做的是按降序对数字进行排序,如果数字相同,则按字母顺序排序
我可以在 sort_by 中实现比较函数吗,或者有没有办法使用 ruby 排序
我有一个包含数字和字母的数组,例如:
newArray = [“1 a”,“1 b”,“2 c”,“2 a”]
我想以一种预期输出的方式对它们进行排序,如下所示:
newArray = [“2 a”,“2 c”,“1 a”,“1 b”]
我想要做的是按降序对数字进行排序,如果数字相同,则按字母顺序排序
我可以在 sort_by 中实现比较函数吗,或者有没有办法使用 ruby 排序
首先,您应该使用更好的输入表示。您可以解析现有的数组,例如:
arr = newArray.map { |s| x,y = s.split; [x.to_i, y] }
# => [[1, "a"], [1, "b"], [2, "c"], [2, "a"]]
然后我们可以使用我们希望的排序sort_by
:
arr.sort_by { |x,y| [-x, y] }
# => [[2, "a"], [2, "c"], [1, "a"], [1, "b"]]
类似于@NiklasB。上面的答案(复制了他的sort_by
)
arr.map(&:split).sort_by { |x,y| [-x.to_i, y] }
=> [["2", "a"], ["2", "c"], ["1", "a"], ["1", "b"]]
以一种不太优雅的方式,你可以做到这一点
arr.sort! do |p1, p2|
num1, str1 = p1.split(' ')
num2, str2 = p2.split(' ')
if (num1 != num2)
p2 <=> p1
else
p1 <=> p2
end
end
$stdout.puts arr