我知道如何使用
例如,假设我有一个像这样的哈希表:
include?
,但是不太清楚如何在多维数组或哈希表中使用它(在哈希表中是否可能?)。例如,假设我有一个像这样的哈希表:
@user.badges => [{:id => 1, :name => 'blahh', :description => 'blah blah blah'}, {:id => 2, :name => 'blahh', :description => 'blah blah blah'}]
我可以这样检查它是否有一个id为1的对象吗?if @user.badges.include?(:id => 1)
# do something
end
这个方法似乎无法正常工作,我应该如何正确地编写它?
(:id => 1)
不会解析为一个表达式(或其他任何东西)。其次,你调用了Array#include?
,而不是Hash#include?
。最后,Hash#include?
只是Hash#has_key?
的别名。 - Bob Amanbadges.include?(:id => 1, :name => 'blahh', :description => 'blah blah blah')
查看结果返回true
。因此,这里的问题更确切地说是Array#include?
只进行元素的精确匹配,而您正在尝试进行部分匹配。因此,您需要使用any?
,因为它允许您传递一个块而不仅仅是一个值。如果您需要返回匹配的哈希值,而不仅仅是检查其是否存在,则应使用find
替换any?
。 - glenn mcdonald{:id => 1, :name => 'blahh', :description => 'blah blah blah'}.include?(:id => 1)
,并没有注意到尽管意图不同,语法仍然有效。你是对的:如果:id => 1
出现在方法的参数中,它会被组装成一个Hash
并作为最后一个参数传递。但是,为了明确起见,在方法调用之外,这仍然是无效的语法。 - Bob Amanany?
这个路线,感谢你们的帮助! - JP Silvashy