【问题标题】:compare two array of hash in general without any specific key in ruby比较两个散列数组,一般没有任何特定的红宝石键
【发布时间】:2021-10-03 23:49:40
【问题描述】:

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

A = [
{​​​​​​​​​​​"a"=>"1000", "b"=>"0", "c"=>"3", "d"=>"1", "e"=>"3", "f"=>"status"}​​​​​​​​​​​,


{​​​​​​​​​​​"a"=>"2", "e"=>"0", "b"=>"0", "c"=>"4", "d"=>"3", "e="3","f"=>"s-2"}​​​​​​​​​​​,


{​​​​​​​​​​​"a"=>"0", "b"=>"0", "c"=>"1", "d"=>"3", "e"=>"1", "f"=>"s-01"}​​​​​​​​​​ ]


B= [

{​​​​​​​​​​​"a"=>"1000", "b"=>"0", "c"=>"3", "d"=>"1", "e"=>"3", "f"=>"status"}​​​​​​​​​​​,


{​​​​​​​​​​​"a"=>"2", "e"=>"0", "b"=>"0", "c"=>"4", "d"=>"3", "e="3","f"=>"s-2"}​​​​​​​​​​​,


{​​​​​​​​​​​"a"=>"0", "b"=>"0", "c"=>"1", "d"=>"3", "e"=>"1", "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

【问题讨论】:

  • 比较上述示例哈希时的预期输出是什么?
  • 我需要通过比较两个数组来获得匹配对
  • 所以在你上面的例子中,你想返回完整的A 数组,因为A 和B 是一样的?当您发布一个并非所有哈希都相等的示例时,也许会更容易?这样就可以更容易地看出哪些要退回,哪些不能退回。
  • 我是新手,所以想知道要比较的代码

标签: arrays json ruby hash compare


【解决方案1】:

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

hash_1 = { "a" => 0, "b" => 0, "c" => 0 }
hash_2 = { "a" => 0, "b" => 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", "b"=>"0", "c"=>"4", "d"=>"3", "e"=>"3", "f"=>"s-2"},
  {"a"=>"0", "b"=>"0", "c"=>"1", "d"=>"3", "e"=>"1", "f"=>"s-01"} 
]
B = [
  {"a"=>"1000", "b"=>"0", "c"=>"3", "d"=>"1", "e"=>"3", "f"=>"status"},
  {"a"=>"2", "e"=>"0", "b"=>"0", "c"=>"4", "d"=>"3", "e"=>"3", "f"=>"s-2"},
  {"a"=>"0", "b"=>"0", "c"=>"1", "d"=>"3", "e"=>"1", "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", "b"=>"0", "c"=>"3", "e"=>"3", "f"=>"status"}
#   Equal hash found: {"a"=>"2", "e"=>"3", "b"=>"0", "c"=>"4", "f"=>"s-2"}
#   Equal hash found: {"a"=>"0", "b"=>"0", "c"=>"1", "e"=>"1", "f"=>"s-01"}

【讨论】:

    猜你喜欢
    • 2010-12-18
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多