ruby - Ruby 中的哈希反转?

标签 ruby arrays hash

我有一个格式的散列:

{key1 => [a, b, c], key2 => [d, e, f]}

我想结束:

{ a => key1, b => key1, c => key1, d => key2 ... }

实现此目标的最简单方法是什么?

我正在使用 Ruby on Rails。

更新

好的,我设法从服务器日志中提取了真实的对象,它是通过 AJAX 推送的。

  Parameters: {"status"=>{"1"=>["1", "14"], "2"=>["7", "12", "8", "13"]}}

最佳答案

hash = {:key1 => ["a", "b", "c"], :key2 => ["d", "e", "f"]}

第一个变体

hash.map{|k, v| v.map{|f| {f => k}}}.flatten
#=> [{"a"=>:key1}, {"b"=>:key1}, {"c"=>:key1}, {"d"=>:key2}, {"e"=>:key2}, {"f"=>:key2}] 

hash.inject({}){|h, (k,v)| v.map{|f| h[f] = k}; h}
#=> {"a"=>:key1, "b"=>:key1, "c"=>:key1, "d"=>:key2, "e"=>:key2, "f"=>:key2} 

UPD

好的,你的哈希是:

hash = {"status"=>{"1"=>["1", "14"], "2"=>["7", "12", "8", "13"]}}
hash["status"].inject({}){|h, (k,v)| v.map{|f| h[f] = k}; h}
#=> {"12"=>"2", "7"=>"2", "13"=>"2", "8"=>"2", "14"=>"1", "1"=>"1"}

关于ruby - Ruby 中的哈希反转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7513730/

相关文章:

java - 通过用户输入更新数组

python - 我有一个单词列表。我想添加一个与每个单词关联的计数器变量。我该怎么做呢?

Java 等价于 Python 字典

javascript - JavaScript中通过Object处理后的Hash数据如何获取原始类型?

ruby-on-rails - 如何检索刚刚使用嵌套方法创建的帐户 ID?

ruby - 使用不同的参数重复 RSpec 示例组

ruby-on-rails - 获取自连接对象及其子对象上的所有关联对象

ruby-on-rails - rails - 在保存到服务器之前将 DateTime 转换为 UTC

php - PHP 中的密码哈希 : Am I Doing This Right?

二维指针数组中的单元格索引