Perl 中哈希数组树的路径列表

2024-02-07

我有一系列路径

C:\A
C:\B\C
D:\AB

我希望将它们放在哈希数组树中,这样我就可以在 TT2 模板中遍历它们。

我的意思是这样的:

@dirs = [
          {
            name => "C:",
            subs => [
                      {
                        name => "A",
                        subs => [],
                      },
                      {
                        name => "B",
                        subs => [
                                  {
                                    name => "C",
                                    subs => [],
                                  }
                                ],
                      }
                    ]
          },
          { 
            name => "D:",
            subs => [
                      {
                        name => "AB",
                        subs => [],
                      }
                    ],
          }
        ]

我还知道我可能在这里做 Brainderp,所以我对其他方法持开放态度,唯一的要求是将路径列表转换为可以使用 TT2 模板工具包重建为树的东西。

还有那个结构叫什么?我只是想到了哈希数组树,但我敢打赌这是错误的。


这是一个非常简短的方法。请注意,这只能如此简单,因为我将您的数据格式更改为与您的树结构完美匹配的哈希值的哈希值。请参阅下面的代码将生成的结构转换为您的结构。

my $tree = {root => {}};
foreach my $input (<DATA>) { chomp $input;
    my $t = $tree;
    $t = $t->{$_} //= {} for split /\\/ => $input;
}

use Data::Dumper; print Dumper $tree;

__DATA__
C:\A
C:\B\C
D:\AB
C:\B\A
C:\B\A\C

Output:

$VAR1 = {
          'C:' => {
                    'A' => {},
                    'B' => {
                             'A' => {
                                      'C' => {}
                                    },
                             'C' => {}
                           }
                  },
          'D:' => {
                    'AB' => {}
                  }
        };

要将这个数据结构转换为您的数据结构,只需使用以下代码:

sub transform {
    my $tree        = shift;
    my @children    = ();
    while (my ($name, $children) = each %$tree) {
        push @children, {
            name => $name,
            subs => [ transform($children) ],
        }
    }
    return @children;
}

my $AoH_tree = {name => 'root', subs => [transform($tree)] };

完毕。 :) 对于一种完全不同的方法,具有更多的糖分、功能和可读性,但更多的 LOC,请参阅我的其他答案 https://stackoverflow.com/a/13208927/1184510.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Perl 中哈希数组树的路径列表 的相关文章

随机推荐

  • Jinja2 按空格分割字符串

    我正在使用 Jinja2 模板引擎 pelican 我有一个字符串说 a 1 我正在寻找一种方法将该字符串分成两部分 使用空格作为分隔符 所以我正在寻找的最终结果是一个变量 它以数组的形式保存两个值 例如str 0 计算结果为 a str
  • 为分层模型创建高效的数据库查询(django)

    考虑这个 django 模型 class Source models Model Some other fields type models ForeignKey Type class Type models Model Some othe
  • WSO2 CEP - 内存不足

    我们在 CEP 上看到内存不足错误 线程转储显示大约有 32000 个线程在监视器上休眠 此外 即使 CEP JVM 选项指定在内存不足时生成 HeapDump 我们也没有看到生成任何堆转储 请指教 CEP JVM Xms256m Xmx1
  • JavaScript 获取 HTML 表的行数

    如何使用 JavaScript 获取 HTML 的行数table有id和名字吗 Given a table thead tr th Header th tr thead tbody tr td Row 1 td tr tr td Row 2
  • id() 函数的用途是什么?

    I read Python 2 文档 http docs python org 2 library functions html id并注意到id 功能 返回对象的 身份 这是一个整数 或长整数 保证该对象在其生命周期内是唯一且恒定的 具有
  • asp.net core 从构建中排除文件

    我正在尝试将 Protractor 添加到我的 asp net core 应用程序中 我通过 npm 添加它 它安装了 selenium webdriver 其中包含一个文件Page aspx cs 这导致构建错误 但我的项目甚至不需要编译
  • 我可以配置并行扩展使用的线程数吗?

    我目前正在使用并行扩展 它是 Net Rx 的反应式扩展 http msdn microsoft com en us devlabs ee794896 aspx 我相信它们也可以通过 Net 4 beta 版本获得 1 有没有办法确定实际使
  • 如何修复顶部和底部边距折叠?

    我是 CSS 新手 我试图了解如何修复以下行 使其不适用于顶部和底部边距 然而 它对于侧边距来说效果很好 contents margin 10px 10px 10px 10px 例子 http jsfiddle net LCTeU http
  • AngularJS 摘要循环究竟是如何工作的?

    我是 AngularJS 的新手 我正在通过教程学习它 我对与此相关的概念有些疑问摘要循环由 Angular 提供 我的应用程序由这两个文件组成 1 索引 html
  • File.copy() 方法不支持给定路径的格式错误

    当我尝试通过 C 中的 file copy 方法将文件从本地计算机复制到本地网络中的其他计算机时 我遇到错误 不支持给定路径的格式 我正在使用以下语法 File Copy C temp sample txt DEMO PC D DummyF
  • 无法使用传单渲染矢量切片 (.mbtiles) 文件

    我正在尝试渲染一些从 OpenMapTile 下载的本地存储和基于矢量的图块 我这样做的原因是因为我的最终应用程序只能在无法连接到互联网的计算机上运行 我已经阅读了许多关于传单是否可以渲染基于矢量的图块的不同内容 但从一些示例来看它似乎可以
  • Makefile 中的函数

    我正在编写一个包含很多重复内容的 Makefile 例如 debug ifort Linux if UNAME Linux then MAKE FC ifort FFLAGS difort PETSC FFLAGS TARGET LEXT
  • IE8浏览器模式与文档模式

    谁能解释一下 IE8 和 IE8 之间的区别浏览器模式 and 文档模式简单来说 是什么导致浏览器模式发生变化 是什么导致文档模式改变 如果用户通过开发人员工具更改模式 即使刷新页面 更改是否仍然存在 我问这个问题是因为我们正在这里做一些
  • 使用输入 fn 在 Tensorflow 估计器中进行预测

    我使用来自的教程代码https github com tensorflow tensorflow blob r1 3 tensorflow examples learn wide n deep tutorial py https githu
  • XML - 将属性反序列化为 Xml 子树

    当我反序列化 xml 字符串时 我需要在名为prop2 My XML
  • R 中的字符串操作:删除多个位置的特定模式,而不删除模式实例之间的文本

    在 R 中 我尝试编写适用于字符串模式的任何改编的代码 字符串的一个例子是 string lt y 1 a b c d 2 e 1 f g 我只想删除包含 模式的部分 例如 b c 和 1 f 并留下 y 1 a d 2 e g 请注意 字
  • 在匹配元素处划分列表的 Pythonic 且有效的方法是什么?

    这非常类似于Python 根据条件拆分列表 https stackoverflow com questions 949098 python split a list based on a condition并且https nedbatche
  • 为 NSTableView 中的行着色

    我想要做的是当单击 I 按钮时设置 NSTableView 中所选行的背景颜色 我见过人们使用过的其他案例tableView willDisplayCell forTableColumn row and setBackgroundColor
  • Elasticsearch - 维护文档历史记录

    我是 Elasticsearch 的新手 有一个非常基本的问题要问 我计划使用 Elasticsearch 作为文档存储 并且在存储文档时 我的要求之一是维护历史数据 因此 我可以成功地将文档发布到 Elasticsearch 但是当我发布
  • Perl 中哈希数组树的路径列表

    我有一系列路径 C A C B C D AB 我希望将它们放在哈希数组树中 这样我就可以在 TT2 模板中遍历它们 我的意思是这样的 dirs name gt C subs gt name gt A subs gt name gt B su