退回任何价值低于 300 美元的 Ruby Hash 商品

Posted

技术标签:

【中文标题】退回任何价值低于 300 美元的 Ruby Hash 商品【英文标题】:Return any items that cost less than $300 in Ruby Hash 【发布时间】:2021-11-28 01:28:03 【问题描述】:

我想退回任何便宜的商品,应该退回任何价格低于 300 美元的商品。

这是主类;

class ShoesInventory
  def initialize(items)
    @items = items
  end

  def cheap
    # this is my solution, but it just print out an array of boolean
    @items.map  |item| item[:price] < 30 

    # to be implemented
  end
end

这是类的一个实例;

ShoesInventory.new([
  price: 101.00, name: "Nike Air Force 1 Low",
  price: 232.00, name: "Jordan 4 Retro",
  price: 230.99, name: "adidas Yeezy Boost 350 V2",
  price: 728.00, name: "Nike Dunk Low"
]).cheap

我希望结果是这样的;

# => [
#      price: 101.00, name: "Nike Air Force 1 Low",
#      price: 232.00, name: "Jordan 4 Retro",
#      price: 230.99, name: "adidas Yeezy Boost 350 V2",
#    ]

Can you guide me ?

【问题讨论】:

在这种情况下,您只需将 map 替换为 select,正如 Drenmi 在他们的回答中指出的那样,但您可能需要花一点时间浏览 Enumerable methods,因为有里面有很多有用的 这可能“只是”一个练习,但您不应该将浮点数用于货币值。查看Money gem 以获得更好的选择。 @Stefan 如果您使用 Ruby 哈希,因为您的数据存储舍入错误可能是您最不关心的问题... @max 我只是不喜欢看到230.990000000000009094947017729282379150390625 的“价格” :-) 【参考方案1】:

你要找的是Enumerable#select

class ShoesInventory
  def initialize(items)
    @items = items
  end

  def cheap
    @items.select  |item| item[:price] < 30 
  end
end

如果您希望能够链接方法,您可能还希望返回一个新的清单实例:

def cheap
  self.class.new(@items.select  |item| item[:price] < 30 )
end

【讨论】:

谢谢!!!我是红宝石新手。如果我可以直接使用选择,为什么我需要使用地图?学过的知识。在此之后,我需要更多地学习 Enumerable :P。 Enumerable 模块是 Ruby 语言的真正瑰宝(双关语)之一。从上到下阅读 API 文档几次是值得的。 :-)

以上是关于退回任何价值低于 300 美元的 Ruby Hash 商品的主要内容,如果未能解决你的问题,请参考以下文章

最新数据显示,价值300亿美元的流媒体广告在发布商品牌和消费者之间出现脱节现象

全球警方关闭创纪录数量假药网站,查获价值超1300万美元假药

ruby 将时区分配给当地时区。然后退回。

花费1000美元就可以进入公司网络?

股价在过去一个月内连续 6 个或以上营业日低于一定价值

翻石头价值投资手册-科技行业