2011-03-06 9 views
0

나는 다음과 같은 해시를 가지고 :루비/레일 - 두 개의 해시로 항목을 교환하는 방법을 감안할 때?

나는 병자 통해 반복되는 일을 할거야, 그리고 이메일이 특정 기준을 충족하는 경우, 내가 valids 해당 항목을 이동 한 다음 제거 할 무엇
@valids 
[ 
    { 
    :lname => "Brown", 
    :email => "[email protected]", 
    :fname => "James" 
    }, 
    { 
    :lname => "Smith", 
    :email => "[email protected]", 
    :fname => "Brad" 
    } 
] 


@invalids 
[ 
    { 
    :lname => nil, 
    :email => "[email protected]", 
    :fname => nil 
    }, 

    { 
    :lname => nil, 
    :email => "[email protected]", 
    :fname => nil 
    } 
] 

invalids에서.

{ 
    :lname => nil, 
    :email => "[email protected]", 
    :fname => nil 
    } 

을 그리고 @valids로 이동하고 @invalids에서 제거 : @invalids 통해 반복하면서

예, 이메일 = [email protected], 내가 먹고 싶어합니다.

새 해시를 만들지 않고도이 작업을 수행 할 수 있습니까? 감사합니다

답변

2

이 그것을 수행해야합니다

@invalids = @invalids.reject do |record| 
    if record[:email] == "[email protected]" 
    @valids.push(record) 
    end 
end 

조금을 설명하기 위해, 나는 그것을 거부합니다, 그래서 invalids.reject @ 을 실행하고 그것을 블록을 통과의 결과로 @invalids을하고 있어요 조건에 맞는 배열 항목 (진실한 것을 반환).

조건부 내부에서 @valids 배열에 더하기

관련 문제