【问题标题】:Change the value of only the first matching object in an array仅更改数组中第一个匹配对象的值
【发布时间】:2023-03-24 22:40:01
【问题描述】:

我从用户那里获取值,将它们作为属性存储在对象中,然后将它们存储在数组中。该数组由以下内容组成:

[
  #<Tender:0x0000000001edc870 @company_name="a", @cost=20, @note="dfgv", @rejection_reason="", @status="open">,
  #<Tender:0x0000000001edb088 @company_name="b", @cost=15, @note="dfg", @rejection_reason="", @status="open">
]

我有两种方法:accept_tenderreject_tenderreject_tender'rejected' 存储在 @status 中。 accept_tender'accepted' 存储在 @status 中。输出将是这样的:

Companies     Cost       Status      Reason for rejection 
AA            240000     rejected      cost is high 
BB            200000     accepted       
CC            230000     closed  

一旦调用accept 方法,第三个状态将更改为'closed'accept方法的代码如下:

def accept_tender
  project_data = find_project
  if project_data.nil?
    puts 'No such project'
  else
    minimum_cost = @tender_management.tenders.map { |tender| tender.cost }.min
    company_data = @tender_management.tenders.map { |tender| [tender.company_name, tender.cost] }.flatten!
    company_name = company_data [company_data.index(minimum_cost) - 1]
    puts "Selected tender is of cost #{minimum_cost} of company #{company_name}"
    update_status
    Menu.show_menu(self)
  end
end

def update_status
  @tender_management.tenders.find { |tender|
    tender.status = 'accepted' if tender.status == 'open'
  }
  @tender_management.tenders.find { |tender|
    tender.status = 'closed' if tender.status == 'open'
  }
end

我使用find 方法找到第一个状态'open',然后将其更改为'accepted'。完成此操作后,所有剩余的'open' 状态应更改为'closed'。除了使用find,还有其他方法吗?

【问题讨论】:

  • 当前代码有什么问题?它的行为是否不正确?或者只是对可能的find 替换的学术兴趣?
  • 没有给定的代码正常工作。我只是 Ruby 的新手,因此想探索更多方法。有没有替代品?
  • 如果您的意图是将所有剩余的“打开”状态更改为“关闭”,您可能不应该在update_status 的第二个块中使用find,对吧?这不是只更新下一个“打开”状态,而不是 all 吗?您可以在这里使用each 而不是find

标签: arrays ruby object


【解决方案1】:

我找到了上述问题的答案。除了find,还可以使用detect 方法仅更改数组中实例的第一次出现。

【讨论】:

    猜你喜欢
    • 2021-03-21
    • 1970-01-01
    • 2020-12-26
    • 2019-01-04
    • 2020-01-13
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 2021-01-28
    相关资源
    最近更新 更多