2012-03-07 78 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