如何从红宝石中的哈希中收集许多属性

Posted

技术标签:

【中文标题】如何从红宝石中的哈希中收集许多属性【英文标题】:How to collect many attributes from hash in ruby 【发布时间】:2019-11-20 10:18:03 【问题描述】:

我想知道是否可以从哈希中收集许多属性。

目前使用 ruby​​ 2.6.3

类似的东西

hash =  name: "Foo", email: "Bar", useless: nil 
other_hash = hash[:name, :email]

输出应该是另一个哈希,但没有无用的键/值

【问题讨论】:

预期的输出是什么?数组?还是没有无用键值的哈希? 没有无用键值的哈希。 @SebastianPalma 关于如何从哈希中删除密钥并获取剩余哈希的详细答案,有不同的选项可供选择。 ***.com/questions/6227600/… 【参考方案1】:

你可以使用Ruby内置的Hash#slice

hash =  name: "Foo", email: "Bar", useless: nil 
p hash.slice(:name, :email)
# :name=>"Foo", :email=>"Bar"

如果使用 Rails,你可以使用Hash#except,它只接收你想省略的键:

p hash.except(:useless)
# :name=>"Foo", :email=>"Bar"

【讨论】:

【参考方案2】:

如果有nil值的无用键,你也可以使用Hash#compact:

h =  name: "Foo", email: "Bar", useless: nil 
h.compact #=> :name=>"Foo", :email=>"Bar"

【讨论】:

以上是关于如何从红宝石中的哈希中收集许多属性的主要内容,如果未能解决你的问题,请参考以下文章

如何递归地用“”替换红宝石哈希中的所有零值?

ruby 红宝石中的文本收集器

元素替换 - 红宝石

如何覆盖红宝石块中的节点属性值/使用红宝石块中的变量值?

如何从给定的一组值中进行选择,四舍五入?

如何在 Ruby 中复制哈希?