- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
nil}, {:id=>2, :title=>"B", -6ren">
我有一个数组,其中包含这样的项目列表
arr = [
{:id=>1, :title=>"A", :parent_id=>nil},
{:id=>2, :title=>"B", :parent_id=>nil},
{:id=>3, :title=>"A1", :parent_id=>1},
{:id=>4, :title=>"A2", :parent_id=>1},
{:id=>5, :title=>"A11", :parent_id=>3},
{:id=>6, :title=>"12", :parent_id=>3},
{:id=>7, :title=>"A2=121", :parent_id=>6},
{:id=>8, :title=>"A21", :parent_id=>4},
{:id=>9, :title=>"B11", :parent_id=>2},
{:id=>10, :title=>"B12", :parent_id=>2},
...
]
如果 parent_id
是 nil
那么它应该是父节点,如果 parent_id
不是 nil
那么它应该属于特定的 parent 。
基于 id
和 parent_id
,我想提供这样的响应:
-A
-A1
-A11
-A12
-A123
-A2
-A21
-B
-B1
-B11
-B12
我如何生成上述响应?
谢谢
最佳答案
您可以使用像 Closure_tree 这样的 gem :
hash_tree
provides a method for rendering a subtree as an ordered nested hash:Tag.hash_tree
#=> {a => {b => {c1 => {d1 => {}}, c2 => {d2 => {}}}, b2 => {}}}
或Ancestry :
Ancestry can arrange an entire subtree into nested hashes for easy navigation after retrieval from the database.
TreeNode.arrange
could for example return:{ #<TreeNode id: 100018, name: "Stinky", ancestry: nil>
=> { #<TreeNode id: 100019, name: "Crunchy", ancestry: "100018">
=> { #<TreeNode id: 100020, name: "Squeeky", ancestry: "100018/100019">
=> {}
}
}
}
参见 https://www.ruby-toolbox.com/categories/Active_Record_Nesting对于其他 gem 。
如果您必须在内存中执行此操作,那么这样的事情应该可行:
nested_hash = Hash[arr.map{|e| [e[:id], e.merge(children: [])]}]
nested_hash.each do |id, item|
parent = nested_hash[item[:parent_id]]
parent[:children] << item if parent
end
tree = nested_hash.select { |id, item| item[:parent_id].nil? }.values
require 'pp'
pp tree
输出
[{:id=>1,
:title=>"A",
:parent_id=>nil,
:children=>
[{:id=>3,
:title=>"A1",
:parent_id=>1,
:children=>
[{:id=>5, :title=>"A11", :parent_id=>3, :children=>[]},
{:id=>6,
:title=>"12",
:parent_id=>3,
:children=>
[{:id=>7, :title=>"A2=121", :parent_id=>6, :children=>[]}]}]},
{:id=>4,
:title=>"A2",
:parent_id=>1,
:children=>[{:id=>8, :title=>"A21", :parent_id=>4, :children=>[]}]}]},
{:id=>2,
:title=>"B",
:parent_id=>nil,
:children=>
[{:id=>9, :title=>"B11", :parent_id=>2, :children=>[]},
{:id=>10, :title=>"B12", :parent_id=>2, :children=>[]}]}]
关于ruby如何生成一个树形结构形式的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18829289/
是否有办法获取所选 TreeView 节点的索引,或者他们是否有一个? 最佳答案 由于您要求“索引”只是为了能够查找与此项目关联的数据,因此您应该知道树控件可以保存您的数据。每个项目(TVITEM 结
我不太确定这个问题以前是否有人问过,因为它似乎太微不足道了,不太新鲜,但是我已经环顾四周一个小时了,还没有发现任何东西 我正在使用 ttk Treeview 来显示和分析表格。对于给定的函数,我希望能
我不太确定这个问题以前是否有人问过,因为它似乎太微不足道了,不太新鲜,但是我已经环顾四周一个小时了,还没有发现任何东西 我正在使用 ttk Treeview 来显示和分析表格。对于给定的函数,我希望能
我有一个复杂的 json 字符串,如下所示: { "id":"2016666", "dt":"2012", "object_extends":[ {
我用了JQuery TreeView在大模式下,我想折叠除 root 之外的所有项目,如何更改 jquery.treeview.js 来执行此操作? 最佳答案 嗯..也许不是最干净的解决方案,但似乎有
这听起来可能很奇怪,因为我无法找到我想做的确切术语。 我正在开发一个应用程序,它具有一组规则(易于转换为函数)和输入/输出对(不那么容易转换为代码),将允许构造规则树以应用于给定的输入达到给定的输出。
我是网络开发的菜鸟。我正在尝试创建一个树状的分层公司组织结构图。我尝试了两个谷歌的 visualization chart和 Mike Bostock 的 D3 Reingold tree . 我想要
我是一名优秀的程序员,十分优秀!