按 Ruby 中数组 b 中的值对数组 a 进行排序
Sort array a by value in array b in Ruby
我有一个数组
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。这个不一样,同样的解决方案不会适用...
您可以将两者结合起来,排序,然后去除原始 a 值:
a.zip(b).sort_by { |_a, _b| -_b }.map { |_a,_| _a }
a.sort_by.with_index { |_,i| [-b[i], i] }
#=> ["c", "e", "b", "d", "g", "a", "f"]
这使用 a
中元素的索引来打破平局。我从对 @tadman 的回答的评论中看到这是需要的,尽管这不是问题陈述中给出的要求。请参阅 Array#<=> 文档的第三段,以了解数组在排序操作中的排序方式。
我有一个数组
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。这个不一样,同样的解决方案不会适用...
您可以将两者结合起来,排序,然后去除原始 a 值:
a.zip(b).sort_by { |_a, _b| -_b }.map { |_a,_| _a }
a.sort_by.with_index { |_,i| [-b[i], i] }
#=> ["c", "e", "b", "d", "g", "a", "f"]
这使用 a
中元素的索引来打破平局。我从对 @tadman 的回答的评论中看到这是需要的,尽管这不是问题陈述中给出的要求。请参阅 Array#<=> 文档的第三段,以了解数组在排序操作中的排序方式。