gpt4 book ai didi

ruby - 如何判断散列中是否有指定键以外的其他键?

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

假设我有一个哈希:

a = {b: "asdfgh", c: "qwerty", d: "dvorak"}

而且我希望能够判断是否存在我在其中指定的键以外的键,如下所示:

a.has_other_keys?(:b, :c, :d)
=> false
a.has_other_keys?(:c, :d)
=> true

但如果键少于指定的键,我不希望它返回 false:

a.has_other_keys?(:b, :c, :d, :e)
=> true

在 ruby​​ 中有没有简单的方法来做到这一点?

最佳答案

Rails has an except/except! method返回删除了这些键的散列。如果你已经在使用 Rails,你可以使用它

class Hash
# Returns a hash that includes everything but the given keys.
# hash = { a: true, b: false, c: nil}
# hash.except(:c) # => { a: true, b: false}
# hash # => { a: true, b: false, c: nil}
#
# This is useful for limiting a set of parameters to everything but a few known toggles:
# @person.update(params[:person].except(:admin))
def except(*keys)
dup.except!(*keys)
end

# Replaces the hash without the given keys.
# hash = { a: true, b: false, c: nil}
# hash.except!(:c) # => { a: true, b: false}
# hash # => { a: true, b: false }
def except!(*keys)
keys.each { |key| delete(key) }
self
end
end

使用上面你可以做:

bundle :002 >    a = {b: "asdfgh", c: "qwerty", d: "dvorak"}
=> {:b=>"asdfgh", :c=>"qwerty", :d=>"dvorak"}
bundle :006 > a.except(:b)
=> {:c=>"qwerty", :d=>"dvorak"}
bundle :007 > a.except(:b).length
=> 2
bundle :008 > a.except(:b, :c, :d, :e).length
=> 0

在普通 Ruby 中,您可以执行以下操作:

2.2.2 :010 >  a.select{|x| ![:b, :c, :d, :e].include?(x)}
=> {}
2.2.2 :011 > a.select{|x| ![:b, :c, :d, :e].include?(x)}.length
=> 0

关于ruby - 如何判断散列中是否有指定键以外的其他键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40755537/

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