从 Perl 中的嵌套数据结构中提取非同级哈希值数组

发布于 2024-12-26 04:08:09 字数 1407 浏览 2 评论 0原文

这是我由 Data::Dumper->Dumper 创建的数据结构:(

$VAR1 = {
          'name' => 'genomic',
          'class' => [
                     {
                       'reference' => [
                                      {
                                        'name' => 'chromosome',
                                        'referenced-type' => 'Chromosome'
                                      },
                                      {
                                        'name' => 'chromosomeLocation',
                                        'referenced-type' => 'Location'
                                      },
                                      {
                                        'name' => 'sequence',
                                        'referenced-type' => 'Sequence'
                                      },
                                      {
                                        'name' => 'sequenceOntologyTerm',
                                        'referenced-type' => 'SOTerm'
                                      }
                                    ],
                     }
                   ],
        };

为了清晰起见,进行了修剪)

我想在单行中返回对引用下的每个名称值的数组的引用。

目前我有

$class->[0]{reference}[0..3]{name}

但无济于事。

此外,此示例有四个索引为 0..3 的同级哈希,如何独立于元素数量来表示整个数组?

This is my data structure created by Data::Dumper->Dumper:

$VAR1 = {
          'name' => 'genomic',
          'class' => [
                     {
                       'reference' => [
                                      {
                                        'name' => 'chromosome',
                                        'referenced-type' => 'Chromosome'
                                      },
                                      {
                                        'name' => 'chromosomeLocation',
                                        'referenced-type' => 'Location'
                                      },
                                      {
                                        'name' => 'sequence',
                                        'referenced-type' => 'Sequence'
                                      },
                                      {
                                        'name' => 'sequenceOntologyTerm',
                                        'referenced-type' => 'SOTerm'
                                      }
                                    ],
                     }
                   ],
        };

(trimmed for clarity)

I would like to return a reference to an array of each name value under reference in a single line.

Currently I have

$class->[0]{reference}[0..3]{name}

but no avail.

Also this example has four sibling-hashes with indexes 0..3, how can I represent the whole array independent of the number of elements?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

空城之時有危險 2025-01-02 04:08:09

不幸的是,没有一个简单的语法可以做到这一点。您必须使用 map:

my $array_ref = [
    map { $_->{name} } @{ $class->[0]{reference} }
];

然后,如果您转储 $array_ref,您将看到它包含:

$array_ref = [
          'chromosome',
          'chromosomeLocation',
          'sequence',
          'sequenceOntologyTerm'
        ];

如果您需要对原始字符串(而不是副本)的引用,则只需在 $_ (所以它会是地图内的 \$_->{name} )。

There isn't an easy syntax to do that, unfortunately. You'll have to use map:

my $array_ref = [
    map { $_->{name} } @{ $class->[0]{reference} }
];

Then, if you dump out $array_ref, you'll see it contains:

$array_ref = [
          'chromosome',
          'chromosomeLocation',
          'sequence',
          'sequenceOntologyTerm'
        ];

If you need references to the original strings (not copies), you just need a backslash before $_ (so it'd be \$_->{name} inside the map).

无敌元气妹 2025-01-02 04:08:09

$class->[0]{reference} 是一个数组引用,所以你必须用@{}取消引用它:

@{$class->[0]{reference}}

是'整个数组',你可以然后在末尾使用切片语法来获取其中的一部分:

@{$class->[0]{reference}}[0..3]

从那里您将使用哈希引用数组,因此您必须使用 formap< 对其进行迭代/代码>。

$class->[0]{reference} is an array reference, so you have to dereference it with @{}:

@{$class->[0]{reference}}

Is the 'whole array', you can then use slice syntax on the end to get a part of it:

@{$class->[0]{reference}}[0..3]

From there you're working with an array of hashrefs, so you'll have to iterate over it with for or map.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文