使用来自单独散列的值对数组排序

时间:2013-10-03 21:06:16

标签: ruby

我有一个ID数组和一个单独的哈希值,用于指示如何对这些ID进行排序。像这样:

阵列:

[
  7,
  3,
  2,
]

排序等级:

{
  1 => 50,
  2 => 70,
  3 => 10,
  4 => 80,
  5 => 60,
  6 => 20,
  7 => 0,
}

我想通过使用哈希值优雅地反向排序第一个数组。所以结果应该是这样的:

[
    2,
    3,
    7,
]

我知道有蛮力方法,但有更简单,更高效的方法吗?

3 个答案:

答案 0 :(得分:2)

我不确定性能更高,但这是一种相对简单的方式

arr = [
  {
    :id => 7,
  },
  {
    :id => 3,
  },
  {
    :id => 2,
  }
]

ranks = {
  1 => 50,
  2 => 70,
  3 => 10,
  4 => 80,
  5 => 60,
  6 => 20,
  7 => 0,
}

arr2 = arr.sort_by{|elem| -ranks[elem[:id]]}

arr2 # => [{:id=>2}, {:id=>3}, {:id=>7}]

答案 1 :(得分:2)

假设您已定义order_hashobject_array,您可以使用以下代码进行排序:

object_array.sort{ |a, b| order_hash[b[:id]] <=> order_hash[a[:id]] }

如果需要,可以使用某个常量代替order_hash

答案 2 :(得分:0)

使用Enumerable#sort_by

input = [
  7,
  3,
  2,
]

ranks = {
  1 => 50,
  2 => 70,
  3 => 10,
  4 => 80,
  5 => 60,
  6 => 20,
  7 => 0,
}

result = input.sort_by{|x| ranks[x]} #=> [7, 3, 2]