Ruby:把每个变成收集

时间:2015-02-10 15:42:20

标签: ruby

每个lecture都有stars代表其评分,从1到5,我想选择sub_lecturesstars >= 5。这就是我所做的:

  sub_lectures = []
  lectures.each do |lec|
    sub_lectures << lec if lec[:stars] >= 5
  end
  @lectures = sub_lectures

但我认为这是非常不优雅的。我知道有collect方法,默认情况下可以返回array

如何使用collect来简化我的代码?

2 个答案:

答案 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的解决方案实际上是最好的解决方案。