2009-06-10 5 views
2
I have a simple hash like so { "1234" => "5", "2345" => "6" } 

키와 값을 모두 사용하여 새 해시를 만들려면 어떻게해야합니까? 좋아요 :해시를 새 것으로 병합하는 방법은 무엇입니까?

{ key_id = "1234", value_id = "5" }, { key_id = "2345", value_id = "6" } 
+0

아마도 SugarCRM, amirite에 대한 일부 WSDL 인터페이스일까요? –

답변

6

실제로이 목표를 달성하려고합니까? 당신이 모든 키를 반복 찾고 있다면, 당신은 .keys를 사용할 수 있습니다

: 당신은 그냥 해시의 배열을 만들려면

h = { "1234" => "5", "2345" => "6" } 
h.keys 
=> ["1234", "2345"] 

, 당신은 키를 반복 할 수 있어야한다

h = { "1234" => "5", "2345" => "6" } 
a = [] 

h.each {|k, v| a << {:key_id => k, :value_id => v} 
0

당신이 할 수있는 원래의 해시의 각 쌍을 통해 루프와 해시의 배열을 구축는 :

hashes = [] 
{ "1234" => "5", "2345" => "6" }.each_pair {|key, value| hashes << { :key_id => key, :value_id => value } } 

은 얻을 것이다 :

[{:key_id=>"2345", :value_id=>"6"}, {:key_id=>"1234", :value_id=>"5"}] 
0

원본에서 파생 된 해시에 대해 키가 어떻게되어야합니까? 이 경우이 코드 사용하여

x = { "1234" => "5", "2345" => "6" } 
y = {} 

x.each do |key, value| 
    y[key] = { "key_id" => key, "value_id" => value } 
end 
1

두 해시를 "병합"나는 당신이 하나의 새로운 해시에 두 개의 서로 다른 해시의 모든 내용을 넣어 의미 생각합니다. 해시의 키가 고유해야하므로 동일한 해시 키가 두 해시 해시에 존재하면 하나의 값만 생존 할 수 있습니다.

이 예제에서는 해시 x와 해시 y의 내용을 해시 z에 병합합니다. 중복 키가 있으면 y의 값은 z의 값을 덮어 씁니다.

x = { "a" => "1","b" => "2","c" => "3" } 
y = { "c" => "999","d" => "4","e" => "5" } 
z = {} 

x.each do |key,value| 
    z[key] = value 
end 

y.each do |key,value| 
    z[key] = value 
end 

소스 해시에는 총 6 개의 키가 있습니다. 키 "c"가 두 개의 hases에 있었으므로 병합 된 해시에는 5 개의 키만 있습니다.

=> {"a"=>"1", "b"=>"2", "c"=>"999", "d"=>"4", "e"=>"5"} 
관련 문제