1

私は2つのファイルinit.rbairport.rb.

値に一致するアイテムの数をカウントするにはどうすればよいですか?

init.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 に答える