有人可以解释为什么push的行为方式如下所示?
基本上,我想打印由填充的数组值push
,以及unshift
.
当我尝试打印push
使用数组索引填充的数组内容时,它总是在数组顶部打印元素,而填充的数组则unshift
打印基于数组索引的数组内容.我不明白为什么.
#!/usr/bin/perl
@names = ("Abhijit","Royal Enfield","Google");
@numbers=();
$number=1;
$i=0;
foreach $name (@names) {
#print $_ . "\n";
$number=$number+1;
#push(@numbers,($number));
unshift(@numbers,($number));
print("Array size is :" . @numbers . "\n");
$i=$i+1;
print("Individual Elements are:" . @numbers[i] . "\n");
pop(@numbers);
}
rhv:/var/cl_ip_down>./run.sh
Array size is :1
Individual Elements are:2
Array size is :2
Individual Elements are:3
Array size is :3
Individual Elements are:4
Run Code Online (Sandbox Code Playgroud)
#!/usr/bin/perl
@names = ("Abhijit","Royal Enfield","Google");
@numbers=();
$number=1;
$i=0;
foreach $name (@names) {
#print $_ . "\n";
$number=$number+1;
push(@numbers,($number));
#unshift(@numbers,($number));
print("Array size is :" . @numbers . "\n");
$i=$i+1;
print("Individual Elements are:" . @numbers[i] . "\n");
}
rhv:/var/cl_ip_down>./run.sh
Array size is :1
Individual Elements are:2
Array size is :2
Individual Elements are:2
Array size is :3
Individual Elements are:2
Run Code Online (Sandbox Code Playgroud)
/ 没有pop /
#!/usr/bin/perl
@names = ("Abhijit","Royal Enfield","Google");
@numbers=();
$number=1;
$i=0;
foreach $name (@names) {
#print $_ . "\n";
$number=$number+1;
#push(@numbers,($number));
unshift(@numbers,($number));
print("Array size is :" . @numbers . "\n");
$i=$i+1;
print("Individual Elements are:" . @numbers[i] . "\n");
#pop(@numbers);
}
rhv:/var/cl_ip_down>./run.sh
Array size is :1
Individual Elements are:2
Array size is :2
Individual Elements are:3
Array size is :3
Individual Elements are:4
Run Code Online (Sandbox Code Playgroud)
#!/usr/bin/perl
@names = ("Abhijit","Royal Enfield","Google");
@numbers=();
$number=1;
$i=0;
foreach $name (@names) {
#print $_ . "\n";
$number=$number+1;
#push(@numbers,($number));
unshift(@numbers,($number));
print("Array size is :" . @numbers . "\n");
$i=$i+1;
print("Individual Elements are:" . @numbers[i] . "\n");
pop(@numbers);
}
rhv:/var/cl_ip_down>./run.sh
Array size is :1
Individual Elements are:2
Array size is :1
Individual Elements are:3
Array size is :1
Individual Elements are:4
Run Code Online (Sandbox Code Playgroud)
Zai*_*aid 28
你真的应该使用use strict;
,并use warnings;
在你的代码.激活它们将允许您识别代码中的错误.
更改以下所有实例:
foreach $name (@names)
- > for my $i (@names)
因为你没有对@names
数组中的元素做任何事情.
@numbers[i]
- > $numbers[$i]
因为这是你使用数组切片而不是引用数组元素的一个不常见的错误.
这不是C.每个"变量"必须具有印记($
,@
,%
,&
在它的前面,等等).那i
应该是真的$i
.
至于push
和之间的区别shift
,文档说明:
推送ARRAY,LIST
将ARRAY视为堆栈,并将LIST的值推送到ARRAY 的末尾.ARRAY的长度增加了LIST的长度....返回完成"推送"后数组中的元素数.
不合时宜的ARRAY,LIST
与转变相反.或者与推动相反,取决于你如何看待它.Prepends列表到数组的前面,并返回数组中新的元素数.
把它用于ASCII-matically ...
+---------+ +-----------+ +---------+
<----- | ITEM(S) | -----> | (@) ARRAY | <----- | ITEM(S) | ----->
shift +---------+ unshift +-----------+ push +---------+ pop
^ ^
FRONT END
Run Code Online (Sandbox Code Playgroud)
这应该是一个评论,但对于评论框来说太长了,所以在这里.
如果你想说明unshift和push之间的区别,以下就足够了:
#!/usr/bin/perl
use strict; use warnings;
my @x;
push @x, $_ for 1 .. 3;
my @y;
unshift @y, $_ for 1 .. 3;
print "\@x = @x\n\@y = @y\n";
Run Code Online (Sandbox Code Playgroud)
输出:
@x = 1 2 3 @y = 3 2 1
注意use strict;
保护您免受许多程序员错误的影响,并use warnings;
在您使用可疑值构造时向您发出警告.在你的水平,两者都不是可选的.