2011-02-04 5 views
14

다음 라인은 1.8.6에서 루비 1.8.7에서 잘 작동합니다. 내가 사용할 수있는 대안 1.8.6Ruby 1.8.6 배열의 값 인스턴스 카운트

x = [3,4,5,6,7,78,4,3,2,5,5,3] 
x.count(3) 
=> 3 

숫자가 1.8.6의 Array에서 메서드가 아니기 때문에이 오류가 발생합니다. 이 버전에도 비슷한 방법이 있습니까?

일반적인 팁으로

답변

9

는 다음 1_8 지점의 루비 1.8.7, 1.8.8 (즉, 팁의 새로운 기능을 많이 구현하려고 정말 멋진 backports library by Marc-André Lafortune,이 Subversion 저장소에서), 1.9.1 및 1.9.2 표준 라이브러리뿐만 아니라 ActiveSupport의 일부 선택 메소드를 순수한 교차 1.8-1.9 호환 루비에서 사용할 수 있습니다. 그냥

require 'backports' 

을 할 경우

그래서, C로 떨어 뜨리거나 파괴하지 않고 루비는 가능한 한 1.9.2에 가까이로 루비 1.8.6, 1.8.7 또는 1.9.1을 켜집니다 하위 호환성.

면책 조항 : 오래된 버전의 Ruby를 사용하지 않을 것이므로 실제로 사용하지 않았습니다.

+1

FYI, 이제 특정 백 포트 (이 경우'require 'backports/1.8.7/enumerable/카운트 ") –

11
count = x.select {|e| e == 3}.size 
+1

누구나 기억에 남을만한 것이 있다면'find_all'은'select'의 별칭입니다. 아니면'select_'가'find_all'의 별명입니다. 어쨌든 여기서 모두 잘 작동합니다. – Telemachus

+0

Groovy에서 select와 findAll을 혼동스럽게 사용했습니다. 그래서, 하나 이상의 동적 언어를 사용한다면, 하나에 충실하려고 노력하십시오. – Geo

20
x = [3,4,5,6,7,78,4,3,2,5,5,3] 
x.grep(3).size 
#=> 3 
+0

클리너 .. 감사합니다. – bragboy