【发布时间】:2010-04-05 17:07:55
【问题描述】:
假设我有一个数组:a=[[1,2,3],[4,5]] 我还有另一个数组: b=[[2.5,1.5,3.5],[1.5,2.5]]
我需要根据“b”对“a”进行排序。 即输出应该是 = [[3,1,2],[5,4]]
我试过了,但我的代码似乎很长。如果您能帮助我,那就太好了。谢谢!
【问题讨论】:
-
你所说的“对'b'排序'a'”是什么意思?您的示例输出对我来说没有意义。
假设我有一个数组:a=[[1,2,3],[4,5]] 我还有另一个数组: b=[[2.5,1.5,3.5],[1.5,2.5]]
我需要根据“b”对“a”进行排序。 即输出应该是 = [[3,1,2],[5,4]]
我试过了,但我的代码似乎很长。如果您能帮助我,那就太好了。谢谢!
【问题讨论】:
这将为您的示例输入提供示例输出,因此希望它是您想要的(它按第二个数组的相应子数组中相同位置的值对第一个数组中每个子数组的值进行降序排序):
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]]
【讨论】:
下一次,把你的代码贴出来是个好主意,对上下文的解释也很方便。
这是获得所需结果的一种方法
a.zip(b).map do |values, sort_values|
sort_values.zip(values).sort.reverse_each.map{|sort, value| value}
end
【讨论】: