gpt4 book ai didi

ruby - 如何从哈希中提取子哈希?

转载 作者:数据小太阳 更新时间:2023-10-29 06:18:38 34 4
gpt4 key购买 nike

我有一个散列:

h1 = {:a => :A, :b => :B, :c => :C, :d => :D}

像这样提取子哈希的最佳方法是什么?

h1.extract_subhash(:b, :d, :e, :f) # => {:b => :B, :d => :D}
h1 #=> {:a => :A, :c => :C}

最佳答案

ActiveSupport,至少从 2.3.8 开始,提供了四种方便的方法:#slice#except 及其破坏性的对应方法:#slice!#except!。其他答案中提到了它们,但将它们总结在一个地方:

x = {a: 1, b: 2, c: 3, d: 4}
# => {:a=>1, :b=>2, :c=>3, :d=>4}

x.slice(:a, :b)
# => {:a=>1, :b=>2}

x
# => {:a=>1, :b=>2, :c=>3, :d=>4}

x.except(:a, :b)
# => {:c=>3, :d=>4}

x
# => {:a=>1, :b=>2, :c=>3, :d=>4}

注意 bang 方法的返回值。他们不仅会定制现有的散列,还会返回已删除(未保留)的条目。 Hash#except! 最适合问题中给出的示例:

x = {a: 1, b: 2, c: 3, d: 4}
# => {:a=>1, :b=>2, :c=>3, :d=>4}

x.except!(:c, :d)
# => {:a=>1, :b=>2}

x
# => {:a=>1, :b=>2}

ActiveSupport 不需要整个 Rails,非常轻量级。事实上,很多非 Rails 的 gem 都依赖于它,所以很可能你已经在 Gemfile.lock 中有了它。无需自行扩展 Hash 类。

关于ruby - 如何从哈希中提取子哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9025277/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com