我有一个ID数组和一个单独的哈希值,用于指示如何对这些ID进行排序。像这样:
阵列:
[
7,
3,
2,
]
排序等级:
{
1 => 50,
2 => 70,
3 => 10,
4 => 80,
5 => 60,
6 => 20,
7 => 0,
}
我想通过使用哈希值优雅地反向排序第一个数组。所以结果应该是这样的:
[
2,
3,
7,
]
我知道有蛮力方法,但有更简单,更高效的方法吗?
答案 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_hash
和object_array
,您可以使用以下代码进行排序:
object_array.sort{ |a, b| order_hash[b[:id]] <=> order_hash[a[:id]] }
如果需要,可以使用某个常量代替order_hash
。
答案 2 :(得分:0)
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]