2012-03-07 79 views
1

我有我轉換成散列2個Ruby對象:一個從XML和另一名來自JSON。當我puts變量名稱我得到散列,所以看起來我正確地做到了這一點。遍歷紅寶石哈希在比較值,另一個Ruby哈希

格式在下面的格式幾條記錄。散列一個的

格式(smithjj是一個唯一的用戶名):

{"Data"=>{"xmlns:dmd"=>"http://www.xyz.com/schema/data-metadata", 
"dmd:date"=>"2012-03-06", "Record"=>{"PCI"=>{"DPHONE3"=>nil, "OPHONE3"=>"111", 
"DTY_DOB"=>"1956", "TEACHING_INTERESTS"=>nil, "FAX1"=>"123", "ROOMNUM"=>"111", 
"DTD_DOB"=>"5", "DTM_DOB"=>"11", "WEBSITE"=>"www.test.edu", "FAX2"=>"324", 
"ENDPOS"=>"Director", "LNAME"=>"Smith", "FAX3"=>"4891", "MNAME"=>"Thomas", 
"GENDER"=>"Male", "ALT_NAME"=>nil, "PFNAME"=>"TG", "id"=>"14101823488", 
"RESEARCH_INTERESTS"=>nil, "BIO"=>"", "CITIZEN"=>"Yes", "EMAIL"=>"[email protected]", 
"SUFFIX"=>nil, "DPHONE1"=>nil}, "termId"=>"234", "IndexEntry"=>{"text"=>"Other", 
"indexKey"=>"DEPARTMENT", "entryKey"=>"Other"}, "dmd:surveyId"=>"23424", 
"username"=>"smithers", "userId"=>"23324"}, "xmlns"=>"http://www.adsfda.com/"}} 

欲遍歷每個唯一的用戶名中的第一散列和比較值:

{ smithjj => {office => 331, buidling => 1} } 

哈希2的格式從第二個哈希的PCI部分轉換爲第一個哈希中的值。鑰匙是不同的名字,所以我計劃將它們配對。

我試着這樣做的幾種方法,但我不斷收到一個字符串整數的錯誤,所以我一定不能正確地迭代。我正在做一個.each do塊,但我看到的所有示例都顯示一個簡單的散列,而不是key => key => value, key => value

任何方向非常感謝。

+0

能不能請你格式化你的代碼通過縮進四個空格?這很有可能得到一個很好的答案,然後 – Jwosty 2012-03-07 02:37:50

+0

「但我繼續得到一個?」 – rwilliams 2012-03-07 02:39:15

+0

會做謝謝..第一次使用本網站。我看看我能否讓它看起來更好。 – user1253640 2012-03-07 02:39:31

回答

0

這裏是你如何能夠爲哈希適當做迭代,如果你還沒有使用這樣的:

h = {:foo => 42, :bar => 43, 44 => :baz} 
h.each {|key, val| puts "The value at #{key} is #{val}."} 

這將產生:

The value at foo is 42. 
The value at bar is 43. 
The value at 44 is baz. 

至於最後一部分你的問題,你能讓它更清楚一點嗎?例如,你準確得到什麼錯誤?這可以幫助我們更多地理解這個問題。

編輯:如果你想要做的是對別人比較特定值,嘗試這樣的事情:

h1 = {:foo => 42, :bar => 43, 44 => :baz, :not_used => nil} 
h2 = {:life_universe => 42, :fourty_three => 45, :another_num => 44, :unused => :pancakes} 
# Very easy to add more 
comparisons = {:foo => :life_universe, :bar => :fourty_three, :baz => :another_num} 
def all_match_up?(hash1, hash2, comps) 
    comparisons.each {|key, val| 
    if key != val 
     # They don't match! 
     puts "#{key} doesnt match #{val}!" 
     return false 
    end 
    } 
    # They all match! 
    true 
end 
all_match_up?(h1, h2, comparisons) 

試試這個,看看會發生什麼;)

+0

你的例子是否適用於這種散列格式。看起來你有所有key =>值。 Mine是{key => {key => value,key => value}}。我可以讓它遍歷只是普通的值,我有一個問題遍歷第一個鍵,然後打印出第一個鍵的所有鍵值。合理? – user1253640 2012-03-07 02:50:42

+0

等等,如果你有一個類似於{:foo => {:bar => 43,:baz =>:44}}的散列,}是否希望它遍歷頂級散列內每個散列的_every single_key,或者_only_在說哈希,:foo? – Jwosty 2012-03-07 03:18:57