【问题标题】:Generate a tree from string split从字符串拆分生成树
【发布时间】:2016-06-22 18:41:43
【问题描述】:

我有一个字符串数组

["ana_ola_una",
"ana_ola_ina",
"ana_asta",
"ana_ena_ola", 
"ana_ena_cala",
"ana_ena_cina",
"ana_ena_cina_ula"] 

我需要将其重新格式化为 ... 的哈希值的哈希值,以使其成为一棵树。预期的结果是:

{ana: 
    {
     ola: {
           una: {},
           ina: {}
          }, 
     asta: {},
     ena: {
           ola: {}, 
           cala:{},
           cina: 
                {
                ula: {}
                }
           }
     }
}

编辑:

我编辑了这个问题,因为我有一个相关的问题,最后我希望它采用这种格式的 JSON。我该怎么办:

var tree = [
        {
            text: "Parent 1",
            nodes: [
                {
                    text: "Child 1",
                    nodes: [
                        {
                            text: "Grandchild 1"
                        },
                        {
                            text: "Grandchild 2"
                        }
                    ]
                },
                {
                    text: "Child 2"
                }
            ]
        },
        {
            text: "Parent 2"
        },
        {
            text: "Parent 3"
        },
        {
            text: "Parent 4"
        },
        {
            text: "Parent 5"
        }
    ];

【问题讨论】:

  • 这不是字符串列表。这是一个文字数组。
  • @mudasobwa 抱歉格式不好,但我并没有接受严格的 Ruby 答案,我只是想将我的想法翻译为通用的。我在寻求算法而不是语言的帮助。
  • SO 希望您一次只问一个问题。您应该将“相关问题”作为单独的问题发布。

标签: ruby dynamic data-structures tree dynamic-programming


【解决方案1】:
arr = %w|ana_ola_una
  ana_ola_ina
  ana_asta
  ana_ena_ola
  ana_ena_cala
  ana_ena_cina
  ana_ena_cina_ula|

result = arr.each_with_object({}) do |s, memo|
  s.split('_').inject(memo) do |deep, k|
    deep[k.to_sym] ||= {}
  end 
end

【讨论】:

  • 非常感谢!这就是我所需要的。
【解决方案2】:

mudasobwa 的回答很好,但如果您使用的是 Ruby 2.3+,这里有一个更简洁的替代方案:

arr = [
  "ana_ola_una",
  "ana_ola_ina",
  "ana_asta",
  "ana_ena_ola", 
  "ana_ena_cala",
  "ana_ena_cina",
  "ana_ena_cina_ula"
]

tree = Hash.new {|h,k| h[k] = Hash.new(&h.default_proc) }
arr.each {|str| tree.dig(*str.split(?_).map(&:to_sym)) }

p tree
# => { ana:
#      { ola:
#        { una: {},
#          ina: {}
#        },
#        asta: {},
#        ena:
#        { ola: {},
#          cala: {},
#          cina: { ula: {} }
#        }
#      }
#    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多