我有书。每本书都有章节列表。每章都有文字。我需要计算字符的总值。我写了这样的代码:
symbols = 0
b.chapters.all.each do |c|
symbols += c.text.length
end
这样做很好。但是,当我锻炼时:
symbols = b.chapters.all.sum(:text.length)
它返回无效的字符数。有没有人有任何建议我错了?
答案 0 :(得分:1)
您可以使用#sum
b.chapters.sum { |c| c.text.length }
这是错误的:b.chapters.all.sum(:text.length)
因为 - :text.length
会将符号:text
的长度设为4
。并且4总结为 n 次,其中 n 是集合b.chapters
的大小。
我尝试使用我的项目中的数据:
[21] pry(main)> Menu.first.dishes.count # => 5
[22] pry(main)> Menu.first.dishes.map { |d| d.dish_type.size } # => [9, 7, 5, 7, 6]
[23] pry(main)> Menu.first.dishes.sum { |d| d.dish_type.size } # => 34
has_many
和Dish
之间有Menu
个关联。现在看下面的另一件事,这让你的傻瓜:
Menu.first.dishes.sum(:a.size) # => 5