排序给另一个哈希散列一个包括有关订单的方法的信息 [英] Sorting an hash given another hash including information about the order method

查看:119
本文介绍了排序给另一个哈希散列一个包括有关订单的方法的信息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我on Rails的3.0.7使用Ruby,我想整理的通过返回考虑preSET顺序排序的阵列,甚至一个新的分类。也就是说,给定以下,说HASH1(为此我考虑它的值,以指示的顺序方法从1到4)

I am using Ruby on Rails 3.0.7 and I would like to sort an hash considering a preset order by returning a sorted array or even a new sorted hash. That is, given the following hash, say HASH1 (for which I consider its values to indicate the order method from 1 to 4)

{
  :dog  => 3,
  :cat  => 2,
  :pig  => 4,
  :frog => 1
}

我想这个排序其他按键,说HASH2,通过考虑HASH1值给定的顺序

I would like to sort this other hash by key, say HASH2, by considering the order given in HASH1 values

{
  :cat  => 'cat_value',
  :dog  => 'dog_value',
  :frog => 'frog_value',
  :pig  => 'pig_value'
}

因此​​,在上述情况下,我应该有输出\\下令这样的:

{
  :frog => 'frog_value', # Order indicated by ':frog => 1' in the HASH1
  :cat  => 'cat_value',  # Order indicated by ':cat => 2'  in the HASH1
  :dog  => 'dog_value',  # Order indicated by ':dog => 3'  in the HASH1
  :pig  => 'pig_value'   # Order indicated by ':pig => 4'  in the HASH1
}

[
  ["frog", 'frog_value'], # Order indicated by ':frog => 1' in the HASH1
  ["cat", 'cat_value'],   # Order indicated by ':cat => 2'  in the HASH1
  ["dog", 'dog_value'],   # Order indicated by ':dog => 3'  in the HASH1
  ["pig", 'pig_value']    # Order indicated by ':pig => 4'  in the HASH1
]

我怎么能这样做?

推荐答案

使用哈希#sort_by

hash = {
  :cat  => [2],
  :frog => [1],
  :pig  => [4],
  :dog  => [3]
}

order = {
  :dog  => 3,
  :cat  => 2,
  :pig  => 4,
  :frog => 1
}

# array of k, v pairs
p sorted_array = hash.sort_by {|k, v| order[k]}
p sorted_hash = Hash[sorted_array]

输出

[[:frog, [1]], [:cat, [2]], [:dog, [3]], [:pig, [4]]]
{:frog=>[1], :cat=>[2], :dog=>[3], :pig=>[4]}

这篇关于排序给另一个哈希散列一个包括有关订单的方法的信息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆