如何在没有迭代的情况下检查数组中的值

时间:2014-05-23 21:41:45

标签: ruby

我想要一行红宝石(不使用each)来回答这个问题:这个数组中是follower_id 2397558816吗?

myArray = [ #<Follower id: 1, username: "Prep Bootstrap", imageurl: "http://pbs.twimg.com//profile_images/2825468445/2a4...", user_id: "thefonso", follower_id: "2397558816", created_at: "2014-05-21 15:29:03", updated_at: "2014-05-21 15:29:03">, #<Follower id: 2, username: "JAVA Developer", imageurl: "http://pbs.twimg.com//profile_images/2825468445/2a4...", user_id: "thefonso", follower_id: "2352382640", created_at: "2014-05-21 15:29:05", updated_at: "2014-05-21 15:29:05"> ]

我确信必须有一个ruby方法或组合这样做才能做到这一点。可以这样做吗?

3 个答案:

答案 0 :(得分:1)

你采用了正确的方法:使用Enumerable#any?

myarray.any? { |v| v.follower_id == 2397558816 }

答案 1 :(得分:0)

(myArray.select {|elem| elem.instance_variable_get(:@id) == 1234567}) != []

如果数组包含具有给定id的元素,则返回true,否则返回false

答案 2 :(得分:0)

注意:此答案基于假设它是ActiveRecord关系。如果不是,请发表评论,我将删除此答案。

这不是一个简单的数组,它是ActiveRecord::Relation对象,它是数组的包装器。您几乎不应该在其上使用纯数组对象,因为此类负责从数据库中提取对象。使用any?将从db获取所有记录,然后迭代搜索匹配。相反,您应该在db lavel上检查它以限制获取的记录数(性能):

 relation.exists?(follower_id: 2397558816)