gpt4 book ai didi

perl - 如何遍历嵌套数据结构中的数组?

转载 作者:行者123 更新时间:2023-12-01 13:01:38 26 4
gpt4 key购买 nike

我正在尝试解析 MediaWiki's API使用 format=yaml 输出。我的 YAML 代码类似于:

use YAML qw(Dump Bless Load);
use YAML::LoadURI;
use YAML::Tag;
my $yaml_hash = LoadURI($wiki_url);
my $id = $yaml_hash->{query}->{namespaces}->[0];
print $id;

这很好,但你如何在不强制执行的情况下迭代 YAML 输出?这是一个想法,但显然这是行不通的。

my $id = $yaml_hash->{query}->{namespaces}-[*]->{id}

这就是YAML output看起来像:

---
query:
namespaces:
-
id: -2
case: first-letter
'*': Media
canonical: Media
-
id: -1
case: first-letter
'*': Special
canonical: Special
-
id: 0
case: first-letter
'*':
content:
-
id: 1
case: first-letter
'*': Talk
subpages:
canonical: Talk
-
id: 2
case: first-letter
'*': User
subpages:
canonical: User
-
id: 3
case: first-letter
'*': User talk
subpages:
canonical: User talk

最佳答案

这是你想要的吗?注意:我没有测试过:

目标:“喜欢”的东西 $yaml_hash->{query}->{namespaces}-[*]->{id} -- 除了功能性的

试试这个:

my @ids = map { $_->{id} } @{$yaml_hash->{query}->{namespaces}} ;

但是,对于很多人来说,for 循环可能更清晰。

my @ids;
foreach my $ns ( @{$yaml_hash->{query}->{namespaces}} ){ push @ids, $ns->{id} }

请注意,我正在继续学习一般的 perl 数据结构知识,而不是任何特定于 YAML 的知识。

假定“query”和“namespaces”是文字;如果这些是参数,那么您需要使用额外的 for-in 或 while 循环来暴力破解那些参数。要遍历哈希,请查找 keys() each() perldoc perlfunc .

关于perl - 如何遍历嵌套数据结构中的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5526174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com