ruby - 比较哈希数组并打印预期结果和实际结果

标签 ruby hash

我有 2 个哈希数组:

actual = [{"column_name"=>"NONINTERESTINCOME", "column_data_type"=>"NUMBER"},
 {"column_name"=>"NONINTERESTEXPENSE", "column_data_type"=>"VARCHAR"},
 {"column_name"=>"TRANSACTIONDATE", "column_data_type"=>"TIMESTAMP"},
 {"column_name"=>"UPDATEDATE", "column_data_type"=>"TIMESTAMP"}]
expected = [{"column_name"=>"NONINTERESTINCOME", "column_data_type"=>"NUMBER"},
 {"column_name"=>"NONINTERESTEXPENSE", "column_data_type"=>"NUMBER"},
 {"column_name"=>"TRANSACTIONDATE", "column_data_type"=>"NUMBER"},
 {"column_name"=>"UPDATEDATE", "column_data_type"=>"TIMESTAMP"}]

我需要比较这两个哈希值并找出 column_data_type 不同的哈希值。

为了比较我们可以直接使用:

diff = actual -   expected

这会将输出打印为:

{"column_name"=>"NONINTERESTEXPENSE", "column_data_type"=>"VARCHAR"}
{"column_name"=>"TRANSACTIONDATE", "column_data_type"=>"TIMESTAMP"}

我的预期输出是,在结果中我想打印实际和预期的数据类型,这意味着实际和预期的哈希数组中缺少“column_name”的数据类型,例如:

{"column_name"=>"NONINTERESTEXPENSE", "expected_column_data_type"=>"NUMBER", "actual_column_data_type" => "VARCHAR"}
{"column_name"=>"TRANSACTIONDATE", "expected_column_data_type"=>"NUMBER","actual_column_data_type" => "TIMESTAMP" }

最佳答案

无论数组中的哈希顺序如何,这都将起作用。

diff = []

expected.each do |elem|
  column_name = elem['column_name']
  column_type = elem['column_data_type']
  match = actual.detect { |elem2| elem2['column_name'] == column_name  }
  if column_type != match['column_data_type']
    diff << { 'column_name' => column_name,
              'expected_column_data_type' => column_type,
              'actual_column_data_type' => match['column_data_type'] }
  end
end

p diff

关于ruby - 比较哈希数组并打印预期结果和实际结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40528021/

相关文章:

ruby-on-rails - 通过 API 创建资源时 Rails 5 ActiveRecord::SerializationTypeMismatch

ruby-on-rails - Rails 模型——非持久类成员或属性?

c++ - unordered_set 的散列自定义指针类型

哈希相似度

python - 为什么 sets,dicts,list 在 python 中是不可散列的

ruby - 如何在 ruby​​ 中只发出一次警告?

ruby-on-rails - Rails Controller 私有(private)方法的功能测试

ruby-on-rails - 只有当所有其他验证都通过时才执行一个验证

javascript - JavaScript 中的 SecureRandom?

python - 防止在 Django 中提交多个表单