合并基础上,红宝石哈希键和值散列多维数组 [英] Merge multidimensional array of hash based on hash key and value in ruby

查看:150
本文介绍了合并基础上,红宝石哈希键和值散列多维数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个数组,我想,以配合在多维数组的散列的其他阵列,

I have one array and i want to match value of id key with other array of hash in multidimensional array,

input = [ 
  [ {"id"=>"1","name"=>"a"},
    {"id"=>"2","name"=>"b"},
    {"id"=>"3","name"=>"c"},
    {"id"=>"4","name"=>"d"},
    {"id"=>"5","name"=>"e"},
    {"id"=>"6","name"=>"f"}
  ],
  [ {"id"=>"3","hoby"=>"AA"},
    {"id"=>"3","hoby"=>"BB"},
    {"id"=>"1","hoby"=>"CC"},
    {"id"=>"1","hoby"=>"DD"},
    {"id"=>"4","hoby"=>"EE"}
  ],
  [ {"id"=>"1","language"=>"A"},
    {"id"=>"1","language"=>"B"},
    {"id"=>"2","language"=>"B"},
    {"id"=>"2","language"=>"C"},
    {"id"=>"6","language"=>"D"}
  ] 
]

我需要阵列输出一样,

I need array output like,

output = [ 
  {"id"=>"1","name"=>"a","id"=>"1","hoby"=>"CC","id"=>"1","language"=>"A","id"=>"1","language"=>"B"},
  {"id"=>"2","name"=>"b","id"=>"2","language"=>"B"},
  {"id"=>"3","name"=>"c","id"=>"3","hoby"=>"AA","id"=>"3","hoby"=>"BB"},
  {"id"=>"4","name"=>"d","id"=>"4","hoby"=>"EE"},
  {"id"=>"5","name"=>"e"},
  {"id"=>"6","name"=>"f","id"=>"6","language"=>"D"}
]

我已经写了code本,

I have wrote code for this,

len = input.length - 1
output = []
input[0].each do |value,index|
  for i in 1..len
    input[i].each do |j|
      if value["id"] == j["id"]
        output << value.merge(j)
      end
    end
  end
end

但我正在逐渐错误输出array.There可能是任何数量的多维数组子数组。

But i am getting wrong output array.There might be any number of sub array in multidimensional array.

感谢,

推荐答案

这也许可以帮助你。

input = [
  [
  {"id"=>"1","name"=>"a"},
  {"id"=>"2","name"=>"b"},
  {"id"=>"3","name"=>"c"},
  {"id"=>"4","name"=>"d"},
  {"id"=>"5","name"=>"e"},
  {"id"=>"6","name"=>"f"}
  ],
  [
  {"id"=>"3","hoby"=>"AA"},
  {"id"=>"3","hoby"=>"BB"},
  {"id"=>"1","hoby"=>"CC"},
  {"id"=>"1","hoby"=>"DD"},
  {"id"=>"4","hoby"=>"EE"}
  ],
  [
  {"id"=>"1","language"=>"A"},
  {"id"=>"1","language"=>"B"},
  {"id"=>"2","language"=>"B"},
  {"id"=>"2","language"=>"C"},
  {"id"=>"6","language"=>"D"}
  ]
]

这种方式可以让你的之类的结果。

This way you can make your "sort" results.

output = {}
input.flatten.each do |h|
  output[h["id"]] = {} unless output[h["id"]]
  output[h["id"]].merge!(h)
end

output.values
# => [
# =>   {"id"=>"1", "name"=>"a", "hoby"=>"DD", "language"=>"B"},
# =>   {"id"=>"2", "name"=>"b", "language"=>"C"},
# =>   {"id"=>"3", "name"=>"c", "hoby"=>"BB"},
# =>   {"id"=>"4", "name"=>"d", "hoby"=>"EE"},
# =>   {"id"=>"5", "name"=>"e"},
# =>   {"id"=>"6", "name"=>"f", "language"=>"D"}
# => ]

但更好的方法是在输入使用哈希。您可以定义像哈希输入ID之类的关键,所以如果你生成数据,你没有问题排序。

成才这样

{
  "1" => {"name" => "a", "hoby" => "DD", "language" => "B"}
}

这篇关于合并基础上,红宝石哈希键和值散列多维数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆