ruby递归树形数据根据id属性获取当前节点的hash

假设我们有一个树形结构,其中每个节点都是一个 Hash,节点中包含 id 属性。我们可以使用 Ruby 的递归函数来根据 id 属性获取当前节点的 Hash。例如:

def search_by_id(tree, id)
  tree.each do |node|
    return node if node['id'] == id
    if node['children']
      result = search_by_id(node['children'], id)
      return result if result
    end
  end
  nil
end

在这段代码中,我们定义了一个名为 search_by_id 的函数,它接受一个树形结构作为参数,并根据 id 属性查找对应的节点。如果当前节点的 id 和目标 id 匹配,则返回当前节点的 Hash。如果当前节点还有子节点,则通过递归调用 search_by_id 函数来遍历其子节点,并查找匹配的节点。最后,如果找不到匹配的节点,则返回 nil

使用方法如下:

tree = [
  {
    'id' => 1,
    'name' => 'A',
    'children' => [
      {
        'id' => 2,
        'name' => 'B',
        'children' => [
          { 'id' => 3, 'name' => 'C' },
          { 'id' => 4, 'name' => 'D' }
        ]
      },
      { 'id' => 5, 'name' => 'E' }
    ]
  }
]

node = search_by_id(tree, 4)
puts node.inspect
# 输出 {"id"=>4, "name"=>"D"}

在上述代码中,我们定义了一个树形结构,并在其每个节点中添加了 id 属性。然后,我们调用 search_by_id 函数来查找 id 为 4 的节点,并将结果存储在变量 node 中。最后,我们使用 inspect 方法打印出节点的内容。

需要注意的是,如果树形结构中有多个节点具有相同的 id 值,则该函数只会返回第一个匹配项。如果需要查找所有匹配项,则可以将返回值改为数组,依次 push 所有匹配节点的 Hash。

在SketchUp中需要rubygems

我一直试图在网上搜索如何在SketchUp中使用rubygems,但一直没有找到具体的方法。下面是我在C:programfilesgoogle SketchUp 8中的插件插件宝石.rb:$: (eval):14C:/Ruby186/lib/ruby/1.8/thread.rb:5C:/Ruby186/lib/ruby/site_ruby/1.8/rubygems.rb:11:in require\"C:/Ruby186/lib/ruby/site_ruby/1.8/rubygems.rb:11(eval)...

日期:2021-06-29 00:00:03 浏览:748

用rubyapi计算Sketchup中阴影面积的问题

有人能帮我吗?现在我正在Sketchup中开发一个关于构建模拟的插件。可以显示阴影,但如何使用ruby API计算其面积。阴影通常描述不完整的照明(半阴影),如曲面侧面的阴影渐变。如果要测量一个区域,可能需要完整的阴影。阴影不是SketchUp实体或绘图元素。它们正在渲染输出,不能(直接)通过API访问。请参阅此处的解决方案50,将阴影绘制为面(但是会修改用户模型),然后对这些面的面积求和。请记住,嵌套组件可以按比例缩小/变换(或向上),因此面区域看起来比实际大小更大(更小)。在这种情况下,使用第二个参数来...

日期:2021-08-19 22:00:05 浏览:820

如何在rubyonrails应用程序中集成谷歌SketchUp

嗨,我是一个RubyonRails应用程序,我想在我的应用程序中集成sketchup。如果可能,请分享这些步骤或一些文档链接。不完全可能。谷歌SketchUp(Google SketchUp)在2012已不复存在,不再受支持。(谷歌把它卖给Trimble Navigation,Inc.)SketchUp、SketchUp Make和SketchUp Pro(由@Last、谷歌和Trimble发布)的所有版本都是桌面应用程序。这些版本的EULA 1禁止在服务器环境中使用,并明确禁止将SketchUp转授给其他...

日期:2021-08-28 11:00:05 浏览:968

保存从Sketchup模型中的非内置ruby类创建的实例

我正在尝试为室内设计师和家具制造商编写一个插件来维护橱柜数据库。所有关于橱柜的信息都将存储在MySql数据库中。在将它们插入模型之前,将根据我编写的适当类在Ruby中创建它们的实例。其思想是:要在Ruby中创建文件柜的实例,在那里处理它们,并且只在Sketchup中绘制为类:Sketchup::Group。当然,我需要Ruby中的实例和Sketchup中的绘图之间的链接。我的问题是:如何/在哪里存储用Ruby创建的实例,以便在重新加载模型后可用和创建。您做过类似的事情吗??在Ruby中创建的实例已经存储在模...

日期:2021-09-17 13:00:03 浏览:568

如何在sketchup中使用ruby知道两个组件相互接触?

如果任何两个组件相互接触,那么我可以使用哪个功能来检查它??对于API没有精确的冲突检测方法。这在过去被要求……- Ruby API类别搜索:\"冲突检测\"请参阅这些找到的主题以讨论解决方法。qwertyuiop:相互接触可能您还应该指定更确切地说,哪一个意思是\"触摸\"?图像603×545 12.1 KB...

日期:2021-09-19 19:00:05 浏览:649

如何使用 selenium-webdriver (ruby) 使用相同的浏览器窗口进行自动化测试?

本文介绍了如何使用 selenium-webdriver (ruby) 使用相同的浏览器窗口进行自动化测试?的处理方法,对大家解决问题具有一定的参考价值 问题描述 我正在使用 ruby​​ 中的 selenium-webdriver 和 cucumber 为网站自动化测试用例.我需要每个功能以特定的顺序运行并使用相同的浏览...

日期:2022-06-28 02:00:31 浏览:561

使用 ruby​​ 生成格式为/etc/shadow 的 SHA512 crypt-style hashes?

本文介绍了使用 ruby​​ 生成格式为/etc/shadow 的 SHA512 crypt-style hashes?的处理方法,对大家解决问题具有一定的参考价值 问题描述 I want to generate SHA512 hashed passwords for inclusion directly into a /...

日期:2022-07-11 04:00:26 浏览:549

therubyracer 安装错误

本文介绍了therubyracer 安装错误的处理方法,对大家解决问题具有一定的参考价值 问题描述 如下所示,libv8 可以正常安装,但 ruby​​racer 不能.我使用的是 Mac 10.7.4.As you can see below, libv8 installs fine, but therubyracer ...

日期:2022-07-19 06:00:35 浏览:736

“在任何存储库中都找不到有效的 gem"(rubygame 等)

本文介绍了“在任何存储库中都找不到有效的 gem"(rubygame 等)的处理方法,对大家解决问题具有一定的参考价值 问题描述 我一直在尝试安装这个rubygame"gem,但每当我使用命令时I've been trying to install this 'rubygame' gem for some time, bu...

日期:2022-07-25 11:00:26 浏览:666

安装 pg gem 失败,“mkmf.rb 找不到 ruby​​ 的头文件"(Mac OSX 10.6.5)

本文介绍了安装 pg gem 失败,“mkmf.rb 找不到 ruby​​ 的头文件"(Mac OSX 10.6.5)的处理方法,对大家解决问题具有一定的参考价值 问题描述 我刚刚升级到 Rails 3,在 MacPorts、gem 和数据库方面有些混乱需要整理.我扔掉了所有的宝石并重新安装它们.除了 pg gem 的要求...

日期:2022-08-12 21:00:35 浏览:808