将哈希数组反向映射到哈希

湿婆

我有一个Array包含Hash一个键和一个值的Array

例如:

a = [{1 => ["foo", "bar"]}, {2 => ["hello"]}, {3 => ["world", "bar"]}]

现在,我想创建一个Hash具有以上Hashes的作为键,并将它们的键作为值。

例如:(期望的结果)

res =  {"foo"=>[1], "bar"=>[1, 3], "hello"=>[2], "world"=>[3]}

我已经解决了这是下面的方式:

b =  Hash.new { |h, k| h[k] = [] }
a.each { |hash|
  hash.each { |key, vals|
    vals.each { |val|
      b[val] << key
    }
  }
}
b
# => {"foo"=>[1], "bar"=>[1, 3], "hello"=>[2], "world"=>[3]}

它可以正常工作,但是应该有比迭代多次更好,更短的方法。请提出建议。

阿列克谢·马蒂什金(Alexei Matiushkin)

可以反转键和值,然后根据需要收集元素:

a = [{1 => ["foo", "bar"]}, {2 => ["hello"]}, {3 => ["world", "bar"]}]

a.map(&:invert).inject({}) { |memo,el| 
    el = el.flatten   # hash of size 1 ⇒ array [k ⇒ v]
    el.first.each { |k| (memo[k] ||= []) << el.last }
    memo 
}

#⇒ {
#  "bar" => [
#    [0] 1,
#    [1] 3
#  ],
#  "foo" => [
#    [0] 1
#  ],
#  "hello" => [
#    [0] 2
#  ],
#  "world" => [
#    [0] 3
#  ]
# }

希望能帮助到你。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AWK关联数组,映射或哈希图

来自分类Dev

为什么将Ruby哈希称为哈希,而不将其称为映射,字典,表或关联数组?

来自分类Dev

哈希数组中的哈希

来自分类Dev

将Perl数组放入哈希

来自分类Dev

将SwiftyJSON映射到数组

来自分类Dev

将数组拆分为哈希

来自分类Dev

将哈希转换为数组

来自分类Dev

Ruby:将数组映射为哈希,在哈希内创建一个数组

来自分类Dev

将数组的哈希合并到哈希数组中

来自分类Dev

哈希表-将哈希值映射到索引

来自分类Dev

将对象数组展平,排序并映射到哈希数组(具有一些折叠值)中

来自分类Dev

AWK关联数组,映射或哈希图

来自分类Dev

哈希数组映射的Trie性能

来自分类Dev

将数组中的哈希转换为哈希中的哈希

来自分类Dev

将数组映射到哈希语法错误

来自分类Dev

如何使用/反向工程师哈希映射键

来自分类Dev

Ruby将特定的哈希键映射到新密钥

来自分类Dev

一致地将字符串映射到数组索引(哈希函数)

来自分类Dev

从映射而不是数组中获取哈希

来自分类Dev

哈希映射的动态数组访问冲突

来自分类Dev

使用数组在PHP中创建哈希映射

来自分类Dev

将数组元素映射到完美的哈希索引NP是否完成?

来自分类Dev

将哈希转换为数组

来自分类Dev

使用递增的键名称将数组值映射到哈希

来自分类Dev

哈希映射到JSON数组

来自分类Dev

Ruby:将数组映射为哈希,在哈希内创建一个数组

来自分类Dev

如何将数组映射到哈希

来自分类Dev

将连续整数映射到非不同整数的哈希函数

来自分类Dev

Javascript - 映射函数中的哈希数组