每个lecture
都有stars
代表其评分,从1到5,我想选择sub_lectures
和stars >= 5
。这就是我所做的:
sub_lectures = []
lectures.each do |lec|
sub_lectures << lec if lec[:stars] >= 5
end
@lectures = sub_lectures
但我认为这是非常不优雅的。我知道有collect
方法,默认情况下可以返回array
。
如何使用collect
来简化我的代码?
答案 0 :(得分:4)
我认为你正在寻找选择方法。
@lectures = lectures.select {|l| l[:stars} >= 5}
答案 1 :(得分:1)
使用collect
的解决方案:
@lectures = lectures.collect { |lec| lec if lec[:stars] >= 5 }.compact
如果不调用compact
,结果数组将包含不满足条件的讲座的nil
值。使用select
的解决方案实际上是最好的解决方案。