2016-10-27 3 views
0

레일에서 루비를 사용하고 특정 문자열에 대해 배열 내에서 해시를 검색 할 수 있는지 파악하려고합니다. 값? 일치하는 항목 (Bob을 찾습니다)이 있으면 True를 반환합니다.해시에 저장된 배열 내에서 문자열 값을 검색하는 방법

```

string_query = "[email protected]" 

email_array is the following:                              
[ 
    [0] { 
     "email" => "[email protected]", 
     "name" => "william" 
    }, 
    [1] { 
     "email" => "[email protected]", 
     "name" => "michael" 
    }, 
    [2] { 
     "email" => "[email protected]", 
     "name" => "robert" 
    } 
] 

```

내가 스택 오버플로이 예제를 참조 -하지만 숫자입니다. 내 것은 문자열이다. How do I get a hash from an array based on a value in the hash?

고맙습니다. 지금 밖으로 나처럼

+0

배열의, 적어도 하나 개의 원소 해시의 배열과 문자열's'를 주어진 경우 'TRUE'를 반환 하시겠습니까 (해시)에는's'를 부분 문자열로 묶는 문자열 인 키 또는 값이 있습니까? 질문을 명확하고 완전하게 작성해야하므로 의견을 설명하기보다는 명확하게 질문을 편집하는 것이 좋습니다. 하나의 작은 점 : 일부 독자는 코드를 자르고 지나칠 수 있습니다. 그렇게하기 위해서 그들은 [0], [[1]'과'[2]'를 제거해야합니다. 게시하기 전에 이러한 불필요한 비트를 제거해야합니다. –

+0

또한 배열에 변수를 할당하십시오 (예 :'arr = [{ "email"=> ...'). –

답변

1

나는이 시도하지 않은,하지만 당신은 당신이 select

email_array.select {|hash| hash["email"] == string_query } 

#=> [{"email"=>"[email protected]", "name"=>"robert"}, {"email"=>"[email protected]", "name"=>"robert2"}] 

를 사용 해쉬가 일치를 모두 선택하려면이

string_query = "[email protected]" 
email_array.each do |s| 
    if s['email'] == string_query 
     #your comparision statements here 
    end 
end 
+0

위대한 감사합니다. 해결책은 독자가 정의 할 필요없이 해당 변수를 참조 할 수있게합니다. 작업, 나는 [ "이메일"] ... 큰 따옴표를 사용해야했습니다. – user2970050

+0

죄송합니다!하지만 기뻤습니다 .. 건배! :) – Pragun

1
string_query = "[email protected]" 


email_array = [{ 
     "email" => "[email protected]", 
     "name" => "william" 
    }, 
    { 
     "email" => "[email protected]", 
     "name" => "michael" 
    }, 
    { 
     "email" => "[email protected]", 
     "name" => "robert" 
    }, 
    { 
     "email" => "[email protected]", 
     "name" => "robert2" 
    } 
] 

를 작동 할 수 true 또는 false을 확인하려면 any?

을 사용하십시오.
email_array.any? {|hash| hash["email"] == string_query } 

#=> true 

첫 번째 인스턴스에만 관심이있는 경우 당신은 detect

email_array.detect {|hash| hash["email"] == string_query } 

#=> {"email"=>"[email protected]", "name"=>"robert"} 
0

당신이 할 수있는 사용이

email_array.select {|hash| hash["email"] == string_query }.present?