我有一个数组
a = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
和另一个数组:
b = [0, 3, 6, 3, 4, 0, 1]
是否可以根据数组 b 中的值对数组 a 进行排序?
结果应为:
a = ['c', 'e', 'b', 'd', 'g', 'a', 'f']
Ruby / Rails中似乎没有这样的东西:
a.sort_with_index{ |elem, index| b[index] }
编辑:响应重复标记:引用的问题有一个数组,其中元素具有ID,另一个数组直接引用ID。这是不一样的,相同的解决方案将不适用......
答案 0 :(得分:3)
a.sort_by.with_index { |_,i| [-b[i], i] }
#=> ["c", "e", "b", "d", "g", "a", "f"]
这使用a
中元素的索引来打破关系。我从对@ tadman的答案的评论中看到了这一点,尽管这不是问题陈述中给出的要求。有关如何在排序操作中排序数组的说明,请参阅Array#<=>文档的第三段。
答案 1 :(得分:1)
您可以将两者合并,排序并删除原始的 a 值:
a.zip(b).sort_by { |_a, _b| -_b }.map { |_a,_| _a }