gpt4 book ai didi

arrays - 使用 Perl 枚举哈希数组

转载 作者:行者123 更新时间:2023-12-04 12:18:48 26 4
gpt4 key购买 nike

我已经花了 2 小时尝试涉及散列和数组的不同解决方案,但我没有找到如何遍历我的散列数组:

我创建了一个这样的数组:

my @matches;
push @matches, {file => $1, function => $2} while m/KEY_FILE \s* \{ [^\}]+ KEY_SECTION \s* \( \s* ([^()]+) \( ([^()]+) \) \s* \)/ixg;
my $count = @matches;

我想做这样的事情:

while (($file, $function) = shift(@matches)) {
print "// File: $file\n";
print "// Function: $function\n";
}

但显然这不是解决方案:(

有什么帮助吗?

最佳答案

请注意,当语句太长时,使用后缀 while(语句修饰符)是不合适的。这远不是一眼就能看清楚的:

push @matches, {file => $1, function => $2} while m/KEY_FILE \s* \{ [^\}]+ KEY_SECTION \s* \( \s* ([^()]+) \( ([^()]+) \) \s* \)/ixg;

由于正则表达式的长度,即使是标准的 while 也很笨拙。

while (/KEY_FILE \s* \{ [^\}]+ KEY_SECTION \s* \( \s* ([^()]+) \( ([^()]+) \) \s* \)/ixg ) {
push @matches, { file => $1, function => $2 };
}

最好将正则表达式的功能分开,放到它自己的变量中:

my $re = qr{
KEY_FILE \s*
\{ [^\}]+ KEY_SECTION \s*
\( \s*
( [^()]+ )
\( ( [^()]+ ) \) \s*
\)
}xi;

while ( /$re/g ) {
push @matches, { file => $1, function => $2 };
}

除此之外,一旦构建了 @matches 数组,最简单的方法就是迭代它的值,这些值是哈希引用。然后您可以使用散列切片 提取每个值对。像这样

for my $href (@matches) {
my ($file, $function) = @{$href}{qw/ file function /};
print "// File: $file\n";
print "// Function: $function\n";
}

或者,如果这两个值仅被访问几次,您可以继续使用散列引用

for my $href (@matches) {
print "// File: $href->{file}\n";
print "// Function: $href->{function}\n";
}

关于arrays - 使用 Perl 枚举哈希数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25308779/

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