2013-08-11 3 views
2

Array의 모든 요소가 부울을 반환하는지 확인하는 가장 쉬운 방법은 무엇입니까? 루비에 컬렉션의 메소드를 호출 한 다음 부울 값을 반환하는 패턴이 있습니까? 표준 Enumerable 방법 중 하나 Array 또는 nil 반환, 그래서 봐난이 방면에 grep를 사용하여 작동하는 예를 쓴 어디 모르겠지만, if 더 관용적 인 코드를 생략 할 수 있다고 생각 :처리 배열과 부울 값 반환

def all_matched_by_regex?(regex) 

    array_collection = ['test', 'test12', '12test'] 
    matched = array_collection.grep(regex) 
    if matched.length == array_collection.length 
     return true 
    end 
    return false 
    end 
+5

'Array # all? '을 확인하십시오. –

+0

예, 그게 전부입니다. 빈 컬렉션 (모든 경우에 true를 반환)에 대한'all?'동작에 대해 알고 있어야합니다. 나는 어떤 것을 제안 할 것을 제안 할 것인가? 뿐만 아니라 패턴을 뒤집어서 확인합니다. – raina77ow

+0

그게 다예요! 정말로 내가 어떻게/모든 것을 건너 뛸 수 있었는지 명확히하지 않고있다. 고마워. – Zed

답변

4

Enumerable.all? {block}을 사용해 보셨습니까? 그것은 정확히 당신이 찾고있는 것처럼 보입니다.

편집 :

내 루비는 약간 녹슨이지만, 여기

regex = /test/ 
=> /test/ 
    array_collection = ['test', 'test12', '12test'] 
=> ["test", "test12", "12test"] 
    array_collection.all? {|obj| regex =~ obj} 
=> true 
+2

저는 이것이 링크 전용 답변 + 덧글로 간주됩니다. 링크 전용 답변은 여기에 오신 것을 환영하지 않습니다. –

+0

@Jan 거기에는 정확히 묻는 것을 수행하는 표준 라이브러리 함수가 있습니다. 거기에 또 뭐라고 말할까요? – Antimony

+4

코드 예제가 좋을 것입니다. OP의 상황을 겨냥한 코드 샘플 - 더 좋습니다. –

0

당신은 변경할 수 있습니다 그것을 사용하는 방법의 예 : 단순히 반환에

if matched.length == array_collection.length 
     return true 
    end 
    return false 

:

matched.length == array_collection.length 

이와 같이 :

def all_matched_by_regex?(regex)  
    array_collection = ['test', 'test12', '12test'] 
    matched = array_collection.grep(regex) 
    matched.length == array_collection.length 
end 
+2

고마워, 나는 그것을 염두에 두겠다. – Zed

+0

의견없이 다운 투표하는 것은 절름발이입니다 ... – alfasin