【问题标题】:Ruby find and return objects in an array based on an attributeRuby 根据属性在数组中查找并返回对象
【发布时间】:2016-05-08 09:51:11
【问题描述】:

如果某个属性正确,如何遍历对象数组并返回整个对象?

我的 Rails 应用中有以下内容

array_of_objects.each { |favor| favor.completed == false }

array_of_objects.each { |favor| favor.completed }

但由于某种原因,这两个返回相同的结果!我试图用collectmapkeep_if!favor.completed 替换each 而不是favor.completed == false,但它们都不起作用!

非常感谢任何帮助!

【问题讨论】:

  • 我想要的是返回整个对象favor if favor.completed and if !favor.completed
  • each 方法总是返回原始数组。
  • 只是为了限定@sugar的评论,当它有一个块时,Array#each返回它的接收者。
  • “返回整个对象”是什么意思?你的意思是你想从给定属性评估true的第一个数组中返回这些对象的数组吗?还是评估“假”?
  • 是的,我就是这个意思。我不想返回属性

标签: ruby-on-rails arrays ruby


【解决方案1】:
array_of_objects.select { |favor| favor.completed == false }

将返回所有已完成的对象为假。

您也可以使用find_all 代替select

【讨论】:

  • 有没有类似select的无损方法?
  • 不明白non-destructive,抱歉。
  • select改变了原来的数组,我只是想知道有没有类似的专门的方法可以保持原来的数组不变?
  • select 不会改变 selfselect! 会。
  • 哦,是的,我现在明白了。现在很困惑。
【解决方案2】:

对于第一种情况,

array_of_objects.reject(&:completed)

对于第二种情况,

array_of_objects.select(&:completed)

【讨论】:

  • 很好,完成了,假设我们都正确理解了这个问题。顺便说一句,我看到魔杖不在了。
  • @CarySwoveland 谢谢你的好话。
  • :& 是什么意思?
【解决方案3】:

您需要使用Enumerable#find_all 来获取所有匹配的对象。

array_of_objects.find_all { |favor| favor.completed == false }

【讨论】:

  • find 和 'find_all'` 都为我返回 nil! :( 很烦人
  • 这是我在[#<RequestedFavor id: 8, title: "Moving day", description: "Help me move to my new flat please!", user_id: 1, completed: false, created_at: "2016-01-30 18:19:33", updated_at: "2016-01-30 18:19:33", type: "RequestedFavor">, #<OfferedFavor id: 9, title: "Got two hours free", description: "I can spare two hours on Friday", user_id: 1, completed: false, created_at: "2016-01-30 18:19:52", updated_at: "2016-01-30 18:19:52", type: "OfferedFavor">]上调用它们的对象数组
【解决方案4】:

对于较新版本的 ruby​​,可以使用filter 方法

array_of_objects.filter { |favor| favor.completed == false }

参考:https://apidock.com/ruby/Array/filter

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    相关资源
    最近更新 更多