如何获取块中的元素数量?

时间:2012-05-24 17:36:04

标签: ruby

我有两个文件init.rbairport.rb

我如何计算与该值匹配的商品数量?

init.rb:

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

airport.rb:

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

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

=> 2 

而不是飞机名称

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

3 个答案:

答案 0 :(得分:1)

Ruby已经在所有枚举器上引入了count方法(如Hashes,Array,...)。您可以像这样“转发”您的区块:

def airplanes_count(&block)
  @airplanes.count(&block)
end

答案 1 :(得分:0)

您的方法应如下所示:

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

答案 2 :(得分:0)

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

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

这将为您提供所需的信息。