在Ruby中的数组b中按值排序数组a

时间:2017-09-26 16:35:15

标签: ruby ruby-on-rails-3

我有一个数组

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。这是不一样的,相同的解决方案将不适用......

2 个答案:

答案 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 }