遍历红宝石哈希在比较值,另一个Ruby哈希
我有我转换成散列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
。
任何方向非常感谢。
这里是你如何能够为哈希适当做迭代,如果你还没有使用这样的:
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)
试试这个,看看会发生什么;)
你的例子是否适用于这种散列格式。看起来你有所有key =>值。 Mine是{key => {key => value,key => value}}。我可以让它遍历只是普通的值,我有一个问题遍历第一个键,然后打印出第一个键的所有键值。合理? – user1253640 2012-03-07 02:50:42
等等,如果你有一个类似于{:foo => {:bar => 43,:baz =>:44}}的散列,}是否希望它遍历*散列内每个散列的_every single_key,或者_only_在说哈希,:foo? – Jwosty 2012-03-07 03:18:57
能不能请你格式化你的代码通过缩进四个空格?这很有可能得到一个很好的答案,然后 – Jwosty 2012-03-07 02:37:50
“但我继续得到一个?” – rwilliams 2012-03-07 02:39:15
会做谢谢..第一次使用本网站。我看看我能否让它看起来更好。 – user1253640 2012-03-07 02:39:31