【问题标题】:Check if hash has a key that contains some text检查 hash 是否有一个包含一些文本的键
【发布时间】:2011-10-30 05:25:41
【问题描述】:

我想检查一个哈希是否有一个包含一些文本的键。它可能不是确切的密钥,但密钥必须包含(如.include?)文本。我的解决方案是:

some_hash.select {|k,v| k.include? "foo"}.empty?

但这会再产生一个哈希值。我只想检查密钥的存在。有没有更好的方法来做到这一点?

【问题讨论】:

    标签: ruby string hash


    【解决方案1】:

    这样会好一点:

    some_hash.any? {|k, v| k.include? "foo"}
    

    (对我来说,这读作 “哈希是否有任何包含 'foo' 的键?”

    或者,这可能效率较低,但实际上效率更高(参见 cmets),并且可能更具可读性:

    some_hash.keys.any? {|k| k.include? "foo"}
    

    【讨论】:

    • 你的中间那个不起作用,因为它为“key”分配了一个键/值数组,然后你得到了 Array.include?,而不是 String.include?,这不起作用部分匹配。快速的时间检查表明,我同意您的最后一种方式更具可读性,也比您的第一种方式略快。
    • @glenn mcdonald:啊!这将是一个 k/v 数组是我的第一直觉,但由于一次愉快的事故,我的测试用例工作了 :) 已编辑,谢谢/+1!
    • 不错的清洁解决方案 +1
    • 如何修改它以实际获取匹配的密钥?
    • @HEATH3N 您可以使用select 代替any?
    【解决方案2】:
    some_hash.keys.any? {|k| k.include? 'foo' }
    

    【讨论】:

      【解决方案3】:

      some_hash.any? {|k,v| k.include? "foo"}

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-21
        • 2018-04-29
        • 1970-01-01
        • 2018-06-17
        • 1970-01-01
        • 2015-05-30
        相关资源
        最近更新 更多