我們如何正確地將陣列推入陣列,然后檢索每個外部陣列(解釋兩者都要求將彼此清楚地分開)?
插圖
my @f; my @e;
for $i (0..40) {
@e=($i =2, $i 1);
push(@f,@e); # just it right ?
}
# how go on get it under multi array control
uj5u.com熱心網友回復:
Data::Dumper是探索這里發生的事情的好工具。它使可視化您的資料結構變得容易。
如果我們運行您的代碼,然后@f使用 Data::Dumper顯示,我們會得到:
$VAR1 = [
2,
3,
3,
4,
4,
5,
5,
6,
6,
[ ... snip ... ]
40,
40,
41,
41,
42,
42,
43
];
所以這不是你想要的。如果你將一個陣列推到另一個陣列上,那么 Perl 只是將第二個陣列中的每個元素添加到第一個陣列的末尾。無法分辨哪個元素屬于哪個陣列。這被稱為“陣列展平”。
這是因為陣列中的元素只能保存一個標量值。另一個陣列不是標量值。但是我們可以參考一個陣列,然后它就是一個標量值。您可以使用 獲得對陣列的參考\。
對代碼的更改很簡單:
my @e=($i =2, $i 1); # declare @e inside the loop
push(@f,\@e); # Take a reference
我們現在得到的輸出是:
$VAR1 = [
[
2,
3
],
[
3,
4
],
[
4,
5
],
[ ... snip ... ]
[
39,
40
],
[
40,
41
],
[
41,
42
],
[
42,
43
]
];
您可以清楚地看到主陣列中的各個“子陣列”。
在perllol手冊頁中有更多關于這方面的內容,您可以在perlreftut和perlref 中找到更多關于參考的資訊。
uj5u.com熱心網友回復:
你的意思是這樣的嗎?
#! /usr/bin/env perl
use warnings;
use strict;
use utf8;
use feature qw<say>;
use Data::Dumper;
my @f = ();
for my $i (0..4) {
my @e = ($i =2, $i 1);
push(@f,\@e);
}
say Dumper(\@f);
exit(0);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/366847.html
