微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一般比较两个散列数组,而没有 ruby​​ 中的任何特定键

如何解决一般比较两个散列数组,而没有 ruby​​ 中的任何特定键

我想在没有任何特定键 "d" 的情况下比较所有值的 2 个哈希数组。请帮助以迭代哈希数组中的所有值的方式比较 2 个哈希数组。

A = [
{​​​​​​​​​​​"a"=>"1000","b"=>"0","c"=>"3","d"=>"1","e"=>"3","f"=>"status"}​​​​​​​​​​​,{​​​​​​​​​​​"a"=>"2","e"=>"0","c"=>"4","d"=>"3","e="3","f"=>"s-2"}​​​​​​​​​​​,{​​​​​​​​​​​"a"=>"0","c"=>"1","e"=>"1","f"=>"s-01"}​​​​​​​​​​ ]


B= [

{​​​​​​​​​​​"a"=>"1000","f"=>"s-01"}​​​​​​​​​​ ]

我已经尝试过下面的代码,但我想比较没有特定键 "d" 的所有元素。请帮忙!

A.each do |e_hash|  
B.each do |a_hash|
if (a_hash["d"].to_s == e_hash["d"].to_s)  
    e_hash.each do |k,v|

puts v if k == "d"  if (a_hash[k].to_s != v.to_s)        
count += 1 
else     
count   
end     
end
end

解决方法

当你想比较没有特定键的两个散列时,你可以使用

hash_1 = { "a" => 0,"b" => 0,"c" => 0 }
hash_2 = { "a" => 0,"c" => 1 }

hash_1.tap { |hs| hs.delete("c") } == hash_2.tap { |hs| hs.delete("c") }
#=> true

在上面的例子中,你可以这样做:

A = [
  {"a"=>"1000","b"=>"0","c"=>"3","d"=>"1","e"=>"3","f"=>"status"},{"a"=>"2","e"=>"0","c"=>"4","d"=>"3","f"=>"s-2"},{"a"=>"0","c"=>"1","e"=>"1","f"=>"s-01"} 
]
B = [
  {"a"=>"1000","f"=>"s-01"} 
]
A.each do |e_hash|  
  B.each do |a_hash|
    if e_hash.tap { |hs| hs.delete("d") } == a_hash.tap { |hs| hs.delete("d") }
      puts "Equal hash found: #{e_hash}"
    end
  end     
end
#=> Equal hash found: {"a"=>"1000","f"=>"status"}
#   Equal hash found: {"a"=>"2","f"=>"s-2"}
#   Equal hash found: {"a"=>"0","f"=>"s-01"}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。