我在Ruby中缺少一个Hash
方法,它只转换/Maphash的值。
h = { 1 => [9,2,3,4], 2 => [6], 3 => [5,7,1] }
h.map_values { |v| v.size }
#=> { 1 => 4, 2 => 1, 3 => 3 }
如何在Ruby中归档这些内容?
更新:我正在寻找map_values()
的实现。
# more examples
h.map_values { |v| v.reduce(0, :+) }
#=> { 1 => 18, 2 => 6, 3 => 13 }
h.map_values(&:min)
#=> { 1 => 2, 2 => 6, 3 => 1 }
9条答案
按热度按时间dfuffjeb1#
Ruby 2.4引入了
Hash#transform_values
和Hash#transform_values!
方法,并提供了所需的扩展。sbdsn5lh2#
你可以像这样对hash类进行猴子修补
apeeds0o3#
你也可以使用
Hash#update
来实现:它将一个哈希中具有重复键的所有值替换为另一个哈希中的值,或者,如果给定了一个块,则使用调用该块的结果。您可以将原始散列作为参数传递,以确保所有值都被替换。
请注意,这会修改散列!如果你想保留原来的哈希值,先
dup
它:lsmd5eda4#
这个对你有用
eh57zj3b5#
没有
map
,只有each
2w2cym1i6#
您可以通过以下方式实现这一点:
093gszye7#
这里还有一种实现它的方法:
ix0qys7i8#
在DeepEscape库中有一个此方法的实现:https://github.com/dgopstein/deep_enumerable/
它被称为
shallow_map_values
:vbopmzt19#
您可以使用
hash.each_value.map { |value| puts(value) }
来遍历散列的所有值。