programing

일치하는 값을 포함하는 해시 키를 찾는 방법

subpage 2023. 6. 23. 22:08
반응형

일치하는 값을 포함하는 해시 키를 찾는 방법

아래 클라이언트 해시를 가지고 있는 경우, client_id와 일치하고 싶은 키를 얻을 수 있는 빠른 루비 방법이 있습니까(다행 스크립트를 작성할 필요가 없음)이 있습니까?예: 키를 가져오는 방법client_id == "2180"?

clients = {
  "yellow"=>{"client_id"=>"2178"}, 
  "orange"=>{"client_id"=>"2180"}, 
  "red"=>{"client_id"=>"2179"}, 
  "blue"=>{"client_id"=>"2181"}
}

Ruby 1.9 이상:

hash.key(value) => key

루비 1.8:

사용할 수 있습니다.

hsh.index(value) => key

지정된 값의 키를 반환합니다.찾을 수 없으면 반환합니다.nil.

h = { "a" => 100, "b" => 200 }
h.index(200) #=> "b"
h.index(999) #=> nil

그래서 얻기 위해"orange"당신은 그냥 사용할 수 있습니다.

clients.key({"client_id" => "2180"})

Enumerable #select:

clients.select{|key, hash| hash["client_id"] == "2180" }
#=> [["orange", {"client_id"=>"2180"}]]

결과는 일치하는 모든 값의 배열이 됩니다. 여기서 각 값은 키와 값의 배열입니다.

해시를 반전할 수 있습니다. clients.invert["client_id"=>"2180"]돌아온다"orange"

해시 이름을 사용할 수 있습니다.키(가칭)

또는 반전이 순서대로 있을 수 있습니다. new_hash = hashname.invert당신에게 줄 것입니다.new_hash더 전통적으로 할 수 있게 해줍니다.

사용해 보십시오.

clients.find{|key,value| value["client_id"] == "2178"}.first

ruby doc에 따르면 http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-key 키(값)는 값을 기반으로 키를 찾는 방법입니다.

ROLE = {"customer" => 1, "designer" => 2, "admin" => 100}
ROLE.key(2)

"클라이언트"를 반환합니다.

문서에서:

  • (객체?) 탐지(만약 아무 것도 = 0) {|obj| ...}
  • (개체?) 찾기 (만약 없음 = 0) {|obj| ...}
  • (개체) 감지(없음 = 0인 경우)
  • (개체) 찾기(없음 = 0)

열거형의 각 항목을 블록으로 전달합니다.블록이 false가 아닌 첫 번째 블록을 반환합니다.일치하는 개체가 없으면 none을 호출하고 지정된 경우 결과를 반환하며, 그렇지 않으면 none을 반환합니다.

블록이 지정되지 않은 경우 열거자가 대신 반환됩니다.

(1..10).detect  {|i| i % 5 == 0 and i % 7 == 0 }   #=> nil
(1..100).detect {|i| i % 5 == 0 and i % 7 == 0 }   #=> 35

이것은 저에게 효과가 있었습니다.

clients.detect{|client| client.last['client_id'] == '2180' } #=> ["orange", {"client_id"=>"2180"}] 

clients.detect{|client| client.last['client_id'] == '999999' } #=> nil 

참조: http://rubydoc.info/stdlib/core/1.9.2/Enumerable#find-instance_method

특정 값의 키를 찾는 가장 좋은 방법은 해시에 사용할 수 있는 키 메서드를 사용하는 것입니다.

gender = {"MALE" => 1, "FEMALE" => 2}
gender.key(1) #=> MALE

그게 당신 문제를 해결하길...

제가 시도할 또 다른 접근 방식은#map

clients.map{ |key, _| key if clients[key] == {"client_id"=>"2180"} }.compact 
#=> ["orange"]

이렇게 하면 지정된 값의 모든 항목이 반환됩니다.밑줄은 키 값이 변수에 할당되지 않도록 키 값을 가지고 다닐 필요가 없음을 의미합니다.값이 일치하지 않으면 배열에 nil이 포함됩니다. 이것이 제가 입력 이유입니다.#compact마지막에

주어진 값의 키를 쉽게 찾을 수 있는 방법은 다음과 같습니다.

    clients = {
      "yellow"=>{"client_id"=>"2178"}, 
      "orange"=>{"client_id"=>"2180"}, 
      "red"=>{"client_id"=>"2179"}, 
      "blue"=>{"client_id"=>"2181"}
    }

    p clients.rassoc("client_id"=>"2180")

...지정된 키의 값을 찾으려면 다음을 수행합니다.

    p clients.assoc("orange") 

키와 값의 쌍을 제공합니다.

언급URL : https://stackoverflow.com/questions/3794039/how-to-find-a-hash-key-containing-a-matching-value

반응형