gpt4 book ai didi

Perl 访问散列/散列引用数据结构中的元素

转载 作者:行者123 更新时间:2023-12-02 07:37:20 24 4
gpt4 key购买 nike

我有一个问题希望您能帮忙解决,因为我是散列和散列引用 Material 的新手?

我有以下数据结构:

$VAR1 = {
'http://www.superuser.com/' => {
'difference' => {
'http://www.superuser.com/questions' => '10735',
'http://www.superuser.com/faq' => '13095'
},
'equal' => {
'http://www.superuser.com/ ' => '20892'
}
},
'http://www.stackoverflow.com/' => {
'difference' => {
'http://www.stackoverflow.com/faq' => '13015',
'http://www.stackoverflow.com/questions' => '10506'
},
'equal' => {
'http://www.stackoverflow.com/ ' => '33362'
}
}

如果我想访问键 'difference' 中的所有 URL,以便我可以对 URL 执行一些其他操作,访问这些元素的正确或首选方法是什么?

例如,我将得到以下 URL,然后我可以在 foreach 循环中对这些 URL 执行操作:

http://www.superuser.com/questions
http://www.superuser.com/faq
http://www.stackoverflow.com/faq
http://www.stackoverflow.com/questions

------编辑------

访问上面显示的数据结构下层元素的代码:

my @urls;
foreach my $key1 ( keys( %{$VAR1} ) ) {
print( "$key1\n" );
foreach my $key2 ( keys( %{$VAR1->{$key1}} ) ) {
print( "\t$key2\n" );
foreach my $key3 ( keys( %{$VAR1->{$key1}{$key2}} ) ) {
print( "\t\t$key3\n" );
push @urls, keys %{$VAR1->{$key1}{$key2}{$key3}};
}
}
}
print "@urls\n";

使用上面的代码为什么会出现以下错误?

不能使用字符串(“13238”)作为 HASH 引用,而“strict refs”正在使用......

最佳答案

不难,把变量中的每一个键都去掉二级键就行了:

my @urls;
for my $key (keys %$VAR1) {
push @urls, keys %{$VAR1->{$key}{'difference'}};
}

如果您正在为取消引用而苦恼,请记住哈希或数组中的所有值只能是标量值。在多级散列或数组中,级别只是彼此堆叠的单个散列/数组。

例如,你可以这样做:

for my $value (values %$VAR1) {
push @urls, keys %{$value->{'difference'}};
}

或者

for my $name (keys %$VAR1) {
my $site = $VAR1->{$name};
push @urls, keys %{$site->{'difference'}};
}

..直接通过值(对散列的引用)或临时变量(通过键表示值)进行路由。更多内容请阅读 perldoc perldata .

关于Perl 访问散列/散列引用数据结构中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14980529/

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