在Ruby中的Hash反转? [英] Hash invert in Ruby?

查看:219
本文介绍了在Ruby中的Hash反转?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经得到了格式的哈希值:

  {键1 => [A,B,C]键2 => [D,E,F]}

和我想结束了:

  {a =>键1,B =>键1,C =>键1,D => KEY2 ...}

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

我使用Ruby on Rails的。

更新

OK,我设法提取服务器日志的真正对象,它正在通过AJAX推。

 参数:{身份=> {1=>1,14],2=>7, 12,8,13]}}


解决方案

 散= {:键1 => [一,B,C],:键2 => [D,E,F]}

第一个变种

  hash.map {| K,V | v.map {| F | {F => ķ}}}。压扁
#=> [{一个=>:KEY1},{B=>:KEY1},{C=>:KEY1},{D=>:键2},{E= >:键2},{F=>:KEY2}]

  hash.inject({}){| H,(K,V)| v.map {| F | H [F] = K}; H}
#=> {一个=>:KEY1,B=>:KEY1,C=>:KEY1,D=>:KEY2,e的= GT;:KEY2,F= >:键2}

UPD

好了,你的哈希值:

 哈希= {地位=> {1=>1,14],2=>7, 12,8,13]}}
哈希[身份]注入({}){| H,(K,V)| v.map {| F | H [F] = K}; H}
#=> {12=>中2,7=>中2,13=>中2,8=>中2,14=>中1 ,1=>中1}

I've got a hash of the format:

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

and I want to end up with:

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

What's the easiest way of achieving this?

I'm using Ruby on Rails.

UPDATE

OK I managed to extract the real object from the server log, it is being pushed via AJAX.

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

解决方案

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

first variant

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

or

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

ok, your hash is:

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中的Hash反转?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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