如何在不使用中间变量的情况下临时将hash转换为array
例如,在下面的代码中,“@arr”变量是一个存储转换后的哈希的数组。
my %scientists = (
"Newton" => "Isaac",
"Einstein" => "Albert",
"Darwin" => "Charles",
);
my @arr = %scientists;
print $_ . " " foreach @arr; # "Newton Isaac Darwin Charles Einstein Albert"
我并不想在这里完成任何具体的事情,只是想知道是否有可能在没有中间变量的情况下将散列转换为数组
print ref(\@arr); # print array
同样,是否有一个东西可以取代“”,以便以下是可能的
print ref(<syntax>%scientists%<sytax>) # should print array.
4条答案
按热度按时间w80xi6nr1#
在列表上下文中,
%hash
产生标量的键值对。例如,
%scientists
产生六个标量"Newton", "Isaac", "Einstein", "Albert", "Darwin", "Charles"
,尽管顺序可以变化。这适用于
my @arr =
的右侧。它也适用于foreach循环的列表。
然而,大多数时候,人们会使用
keys( %scientists )
而不仅仅是%scientists
。对于底部的问题,您可以使用
[ ... ]
大致相当于do { my @anon = ...; \@anon }
。换句话说,它仍然创建一个数组,但该数组是匿名的。
iyr7buue2#
这个问题的措辞似乎不一致--它询问的是一个数组,实际上似乎想要一个列表,但讨论也没有明确支持这一点。也许它是在探索如何在不创建变量的情况下“序列化”或字符串化哈希。下面是一些选项
打印我经常使用的哈希
或者,使其总是处于相同的顺序,
这种方法可用于构建键值对的列表或字符串。
可以进一步操作的内容。(使用hashref时,它是
keys %$hr
和$h->{$_}
。)而且,“转储程序”库为我们解包数据结构
需要安装Data::Dump包。一个核心模块,应该与Perl一起安装,是Data::Dumper(函数
Dumper
返回格式化字符串)。还有其他模块。u1ehiz5o3#
您希望转换执行什么操作?
如果你只想要钥匙你可以做
如果你只想要你能做的值
如果你想让它们混合成键/值对,就这么做吧
需要记住的是,由于散列是无序的,因此您不知道将返回什么顺序。
2fjabf4q4#
你的措辞有点混乱(数组vs列表),但我认为你真正想要的是将%Hash变量转换为列表,以便dump它,而没有中间的@array变量。
这里是调试器中的一个快速演示:
print ref();# print array
注意:Data::Dumper是核心,即每个Perl版本都可用。
我个人更喜欢Data::Dump,它需要从CPAN安装。