Perl:是否可以迭代匿名哈希?

标签 perl hash foreach anonymous-types

遍历列表很容易:

foreach my $elem ( 1, 2, 3, 4, 5 ) {
  say $elem;
}

或匿名数组:
foreach my $elem (@{[ 1, 2, 3, 4, 5 ]}) {
  say $elem;
}

但是有可能对匿名哈希做同样的事情吗?我试过:
while (my ($key, $value) = each (%{{ a => 1, b => 2, c => 3 }})) {
  say "$key=$value";
}

但我得到了一个无限循环。

最佳答案

foreach 循环计算其表达式一次。 while ,另一方面,每次通过评估其表达式。这意味着您要反复创建一个新的散列并获取它的第一个元素。

您可以执行以下操作:

use List::Util 1.29 qw( pairs );

for my $pair ( pairs %{ { a => 1, b => 2, c => 3 } } ) {
   my ( $key, $val ) = @$pair;
   ...
}

但就像您的第二个代码段是第一个代码段的不必要的浪费和复杂版本一样,以上是以下内容的不必要的浪费和复杂版本:
use List::Util 1.29 qw( pairs );

for my $pair ( pairs a => 1, b => 2, c => 3 ) {
   my ( $key, $val ) = @$pair;
   ...
}

关于Perl:是否可以迭代匿名哈希?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39802727/

相关文章:

java - JSP 中 forEach 内的奇怪函数

perl - (如何)我可以在调用 Symbol::delete_package 之后重新创建一个包吗?

Perl - 在 Windows 上建立 SFTP 连接的最佳方法

perl - 使用Perlbrew构建带有调试符号的Perl

c++ - C++ 中无序关联容器的哈希函数

powershell - Powershell远程处理加快Foreach循环托管Exchange

perl - 将文件句柄与 IO::Select::can_read() 返回的 glob 进行比较

hash - md5的纯Lua实现

hash - 将 UUID 数字流随机分为 10 个桶

C# 如何避免在 .Split() 中拆分名称?