退回任何价值低于 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亿美元的流媒体广告在发布商品牌和消费者之间出现脱节现象