1

我有两个文件init.rbairport.rb.

如何计算与该值匹配的项目数?

初始化.rb:

airport1.airplanes_count { |a| a.aircraft_type == "Boeing 747" }

机场.rb:

def airplanes_count
  @airplanes.each  { |a|  a if yield(a)  }
end

如果aircraft_type= 波音 747,我需要获得一些飞机:

=> 2 

而不是飞机名称

=> #<Airplane:0x0000000155e348>
   #<Airplane:0x0000000155e028>"
4

3 回答 3

1

Ruby 已经为count所有枚举器(如哈希、数组......)带来了一个方法。您可以像这样“转发”您的块:

def airplanes_count(&block)
  @airplanes.count(&block)
end
于 2012-05-24T17:43:51.547 回答
0

您的方法应如下所示:

def airplanes_count
    @airplanes.count{ |a|  a if yield(a)  }
end
于 2012-05-24T17:42:30.383 回答
0

有更好的方法可以做到这一点......但是......如果您不想更改太多代码,您可以将 planes_count 的主体更改为这一行。

def airplanes_count
    @airplanes.inject(0)  { |count,a|  yield(a)?  (count + 1) : count  }
end

这将为您提供您正在寻找的东西。

于 2012-05-24T17:51:20.820 回答