2012-05-24 3 views
1

두 파일 init.rbairport.rb이 있습니다.블록의 요소 수를 얻으려면 어떻게해야합니까?

값과 일치하는 항목의 수를 어떻게 계산합니까?

init.rb :

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

airport.rb : 대신

=> 2 

= 보잉 747, I는 항공기의 번호를받을 필요가

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

aircraft_type 경우 항공기 이름

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

답변

0

귀하의 방법은 다음과 같아야합니다

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

gabitzish가 1 \t 데프 airplanes.count {@ \t \t 풋 airplanes_count | A | a yield (a)} \t end – Savroff

+0

+1은 어디에 있습니까? : D – gabitzish

+0

ssory : D는 평판이 없다 :) 내 첫 번째 secodns에 stackoverflow))))) – Savroff

1

루비는 이미 (해시, 배열, ... 등) 모든 열거 자에 count 방법을 제공합니다. 당신은 너무 많은 코드를 변경하지 않으려면

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

가이 작업을 수행하는 더 나은 방법이 있습니다 ...하지만 ... 당신이 단지의 몸을 변경할 수 있습니다 :이처럼 블록이 "전달"할 수 있습니다 이 줄에 airplanes_count.

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

이렇게하면 원하는 것을 얻을 수 있습니다.

관련 문제