我试图创建一个哈希数组,但我无法循环访问数组。我曾尝试这个代码,但它不工作:如何创建哈希数组并在Perl中循环它们?
for ($i = 0; $i<@pattern; $i++){
while(($k, $v)= each $pattern[$i]){
debug(" $k: $v");
}
}
我试图创建一个哈希数组,但我无法循环访问数组。我曾尝试这个代码,但它不工作:如何创建哈希数组并在Perl中循环它们?
for ($i = 0; $i<@pattern; $i++){
while(($k, $v)= each $pattern[$i]){
debug(" $k: $v");
}
}
首先,你为什么不是use
ing strict
和warnings
?以下几行应该在您创建的每个Perl程序的顶部,位于#!/usr/bin/perl
之后。 总是。
use strict;
use warnings;
而且我知道你是不是因为我敢肯定你会得到一些不错的错误信息出来的从这个strict
和warnings
,并从代码中的其他许多地方为好,通过判断你的变量使用。
其次,你为什么不这样做:
for my $i (@pattern) {
..
}
这通过每一个元素循环中@pattern
,同时将其分配给$i
之一。然后,在你的循环中,当你想要一个特定的元素时,只需使用$i
。对$i
所做的更改将反映在@pattern
中,并且当循环退出时,$i
将超出范围,基本上会自行清理。
三,拉里墙的爱,请与my
声明变量来定位他们。我承诺,这真的不那么难,它使你成为一个更好的人。
第四,最后,你的数组将引用存储为散列值,而不是散列值。如果他们存储散列,则代码将会出错,因为散列以%
开头,而不是$
。实际上,参考(任何类型)都是标量值,因此从$
开始。因此,我们需要提领他们获得哈希:
for my $i (@pattern) {
while(my($k, $v) = each %{$i}) {
debug(" $k: $v");
}
}
或者,用自己的方式:
for (my $i = 0; $i<@pattern; $i++) { # added a my() for good measure
while(my($k, $v) = each %{$pattern[$i]}) {
debug(" $k: $v");
}
}
试试这个:
for my $hashref (@pattern) {
for my $key (keys %$hashref) {
debug "$key: $hashref->{$key}";
}
}
并附上您尝试什么,最大的问题是each $pattern[$i]
。 each函数需要一个散列来处理,但$pattern[$i]
返回一个hashref(即对散列的引用)。您可以通过提领$pattern[$i]
作为哈希解决您的代码:
while(my($k, $v) = each %{$pattern[$i]}) {
另外,提防每一个功能,它可以leave the hash iterator in an incomplete state。
11打我秒。也许我应该漫不经心。 – 2009-08-24 07:30:19
我尝试快速发布,然后回去漫步。 – 2009-08-24 07:36:50
这是一个很好的策略。真的,我有很多东西要学。另外,关于为什么'each()'不好。我喜欢你的星球大战参考。 – 2009-08-24 07:45:46
请参阅Perl数据结构食谱的文档: perldoc perldsc
我爱你^^。是的,请使用“我的”... – 2009-08-24 07:35:25
+1。 ;) – 2009-08-24 07:39:17
哈哈,感谢您的回答,即使有很多需要阅读的信息:p我正在寻找的是%{$ i}(或%{$ _})来重新获得我的一些Perl荣誉)。 – Marius 2009-08-24 07:58:06