我有以下Ruby散列

a = {
  7 => [1469, 2283],
  5 => [1469, 5464],
  3 => [7561],
  6 => [7952, 8114],
  4 => []
}

并希望获得将数字显示为值的键

 b = {
   1469 => [7,5],
   2283 => [7],
   5464 => [5]
   ...  
 }

我该怎么做呢?我相信有一些超级巧妙的方法可以完成这件事.

推荐答案

已给予:

a = {
    7 => [1469, 2283],
    5 => [1469, 5464],
    3 => [7561],
    6 => [7952, 8114],
    4 => [1469, 2283], 
    2 => []
}

使用新数组的默认值,单位为b:

b=Hash.new {|hsh, key| hsh[key] = [] }
a.each{|k,v| v.each{|n| b[n] << k} }

或将对象创建包括在each_with_object中:

b=a.each_with_object(Hash.new {|h,k| h[k] = []}) { |(k,v), h|
    v.each{ |e| h[e] << k } }   

结果b是:

{1469=>[7, 5, 4], 2283=>[7, 4], 5464=>[5], 7561=>[3], 7952=>[6], 8114=>[6]}

Ruby相关问答推荐

CarrierWave Multi-uploader重命名现有文件

Ruby:这两种混入模块方法是否等效?

使用 RSpec 存根 Time.now

Ruby gem 权限被拒绝 /var/lib/gems 使用 Ubuntu

将ruby数组转换为连续对数组

ruby:对两个或多个数组的对应成员求和

在基于值的哈希数组上唯一

Ruby:如何计算相对于另一个路径的路径?

如何从 Gemfile 安装 gem?

为什么在Ruby中用空格分隔的两个字符串连接在一起?

C# ?? Ruby 中的运算符?

如何强制 Ruby 显示完整的堆栈跟踪?

Ruby 中方法名称的限制是什么?

group_by 在 rails by 2 或更多属性

如何在 ruby​​ net/http 中实现 cookie 支持?

动态设置 Ruby 对象的属性

如何将哈希键转换为方法名称?

Ruby中的urldecode?

给定一组参数,如何将这些参数发送到 Ruby 中的特定函数?

从 'mm/dd/yyyy' 格式解析 ruby​​ DateTime