ruby - 使用数组作为其中之一转换键和值

标签 ruby

我有以下 Ruby 哈希

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

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

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

我该怎么做?我确信有一些 super 巧妙的方法可以完成它。

最佳答案

给定:

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 - 使用数组作为其中之一转换键和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74707772/

相关文章:

ruby - HTTParty header 在 ruby​​ 脚本中不起作用

ruby - 通过 Ruby 搜索和替换文件中的多个单词

ruby-on-rails - 我怎样才能加快这个正则表达式?

ruby-on-rails - 测试多个变量是否小于一个值的 Ruby 方法

ruby-on-rails - 在 ruby​​ 中转义的 url

ruby-on-rails - 按created_at日期的降序对对象数组进行排序

ruby-on-rails - 在调用操作之前检查 rails 中是否存在 header 属性

ruby - 从 Ruby(不是 shell)使用 Compass

ruby - 将json输出为字符串

ruby-on-rails - Rails 与 Ruby CGI