在Ruby中,如何用另一个多维数组对一个多维数组进行排序?

时间:2010-04-05 17:07:55

标签: ruby sorting arrays

假设我有一个数组:a = [[1,2,3],[4,5]] 我有另一个数组:b = [[2.5,1.5,3.5],[1.5,2.5]]

我需要对'b'排序'a'。 即输出应为= [[3,1,2],[5,4]]

我试过,但我的代码似乎非常冗长。如果你可以帮助我,那就太好了。谢谢!

2 个答案:

答案 0 :(得分:3)

这为您的示例输入提供了示例输出,因此希望它是您想要的(它将第一个数组中每个子数组的值按第二个数组的相应子数组中相同位置的值进行排序):

class Array
  def sort_by_other_array(arr)
    zip(arr).sort_by {|x,y| y}.map {|x,y| x}
  end
end

a=[[1,2,3],[4,5]]
b=[[2.5,1.5,3.5],[1.5,2.5]]
a.zip(b).map {|x,y| x.sort_by_other_array(y).reverse}
#=> [[3, 1, 2], [5, 4]]

答案 1 :(得分:1)

下次发布您的代码是一个好主意,对上下文的解释也很方便。

这是获得理想结果的方法

a.zip(b).map do |values, sort_values|
  sort_values.zip(values).sort.reverse_each.map{|sort, value| value}
end