일치하는 값을 포함하는 해시 키를 찾는 방법
아래 클라이언트 해시를 가지고 있는 경우, 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"})
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
'programing' 카테고리의 다른 글
VBA를 사용하여 Excel 사용자 양식의 다중 열 목록 상자에 헤더를 추가하는 방법 (0) | 2023.06.23 |
---|---|
Excel 셀 텍스트가 다음 빈 셀로 표시되지 않음 (0) | 2023.06.23 |
Mongoose 인덱스를 만들지 않음 (0) | 2023.06.23 |
c에서 구조 요소의 간격띄우기 찾기 (0) | 2023.06.18 |
SQL 쿼리를 사용하여 Oracle 스키마 크기를 표시하는 방법은 무엇입니까? (0) | 2023.06.18 |