【问题标题】:How to check if a key in a list of hash's contains a string in Ruby?如何检查哈希列表中的键是否包含Ruby中的字符串?
【发布时间】:2013-06-25 15:59:53
【问题描述】:

我有一个由哈希组成的数组:

people = [{'name':'Bob','id':12}, {'name':'Sam','id':25}, ...etc]

是否有任何简单的方法可以检查数组 people 是否包含例如包含 id 16 的哈希?

如果这可以用其他数据结构完成,请提出建议。我并不固执地使用哈希。我只需要存储名称和 ID(以后可能会扩展到更多字段)。

我来自 Java/C 背景,如果这有助于您的解释。

【问题讨论】:

  • 为什么字符串和符号都作为键?
  • 您可能希望将所有内容存储在哈希而不是数组中。您添加的内容越多,查找速度越慢将使用数组。纯哈希解决方案将具有几乎线性的查找速度。

标签: ruby arrays search hash


【解决方案1】:

这样的?

people.select { |p| p[:id] == '16' }

select 将遍历数组并返回结果

另外,您可以detect 只获得第一个匹配项

【讨论】:

    【解决方案2】:

    Enumerable#findEnumerable#find_allEnumerable#any? 是不错的选择,如下所示:

    people = [{name:'Bob',id:'12'}, {name:'Sam',id:'25'}]
    p people.find{ |i| i[:id] == '12' } # to find a single and first entry which satisfies the given condtion
    # => {:name=>"Bob", :id=>"12"}
    
    
    people = [{name:'Bob',id:'12'}, {name:'Sam',id:'25'},{name:'Max',id:'12'}]
    p people.find_all{ |i| i[:id] == '12' } # to find a multiple entries which satisfies the given condtion
    # => [{:name=>"Bob", :id=>"12"}, {:name=>"Max", :id=>"12"}]
    
    people = [{name:'Bob',id:'12'}, {name:'Sam',id:'25'},{name:'Max',id:'12'}]
    p people.any? { |i| i[:id] == '12' }
    # => true
    

    【讨论】:

    • 这是Enumerable,而不是enum
    • @SergioTulentsev 感谢您的编辑.. :) 我很着急.. 总之我写了..
    猜你喜欢
    • 2019-08-08
    • 1970-01-01
    • 2015-06-28
    • 2015-03-28
    • 1970-01-01
    • 2012-01-05
    • 2021-10-20
    • 2014-11-26
    • 2017-04-13
    相关资源
    最近更新 更多