如何从没有一致键的哈希数组生成表?

时间:2011-12-15 17:34:26

标签: arrays ruby hash

我有一个哈希数组,我想把它变成一个表,但棘手的部分是哈希键不一致:

a = [
    {
     "name" => "Jack",
     "phone" => "9542221234",
     "state" => "FL"
     },
     {
        "name" => "John",
        "job" => "Lawyer"
    },
    {
        "name" => "Mike",
        "campaign" => "test",
        "state" => "NY"
    }
]

我对如何遍历数组感到茫然,拔出唯一的键名并将适用的值添加到行中。我正试图达到这个效果:

Name |   Phone   |  State  | Campaign |  Job
---------------------------------------------
Jack   9542221234    FL
John                                   Lawyer
Mike                 NY       test

我搜索了一个解决方案,并查看了不同的宝石,例如Builder,但我发现的每个示例都假设密钥名称是一致的,并从数组中的第一个哈希中提取表头密钥。

1 个答案:

答案 0 :(得分:2)

cols = a.map(&:keys).flatten.uniq
cols.each do |colname|
  printf "%-10s ", colname
end
puts
a.each do |row|
  cols.each do |colname|
    printf "%-10s ", row[colname]
  end
  puts
end