我有一个数组数组
@data = [["Hi", "Hello"],["Apple", "Orange"]];
我需要插入一个新数组
@a = ["a", "b"];
我希望数组@data 看起来像这样
@data = [["Hi", "Hello"],["Apple", "Orange"], ["a", "b"]];
我怎样才能做到这一点?
我有一个数组数组
@data = [["Hi", "Hello"],["Apple", "Orange"]];
我需要插入一个新数组
@a = ["a", "b"];
我希望数组@data 看起来像这样
@data = [["Hi", "Hello"],["Apple", "Orange"], ["a", "b"]];
我怎样才能做到这一点?
当您键入
[ "foo", "bar", "base" ]
它不是一个简单的数组,而是对数组的引用:
my $ref = [ "foo", "bar", "base" ];
print $ref;
通过示例显示:
ARRAY(0x1d79cb8)
一个简单的数组被@array
分配给这个简单的列表:
my @array = ( "foo", "bar", "base" )
仍然使用参考:
use Data::Dumper;
# Using $array_ref to store the reference.
# There's no reason to use an @array to store a
# memory address string...
$array_ref = [["Hi", "Hello"],["Apple", "Orange"]];
# Pushing in the dereferenced array ref
push @$array_ref, ["a", "b"];
# Let's the doctor take a look in this body
print Dumper $array_ref;
输出:
$VAR1 = [
[
'Hi',
'Hello'
],
[
'Apple',
'Orange'
],
[
'a',
'b'
]
];
看起来如你所愿,不是吗?
你有:
@data = [ #Open Square Bracket
["Hi", "Hello"],
["Apple", "Orange"]
]; #Close Square Bracket
而不是这个:
@data = ( #Open Parentheses
["Hi", "Hello"],
["Apple", "Orange"]
); #Close Parentheses
该[...]
语法用于定义对数组的引用,而(...)
定义为数组。
在第一个中,我们有一个@data
包含一个成员的数组$data[0]
。该成员包含对由另外两个数组引用组成的数组的引用。
在第二个中,我们有一个@data
包含两个成员的数组,$data[0]
并且$data[1]
。这些成员中的每一个都包含对另一个数组的引用。
对此要非常非常小心!我假设你的意思是第二个。
让我们使用一些可以稍微清理一下的语法糖。这就是您的代表的样子:
my @data;
$data[0] = ["Hi", "Hello"];
$data[1] = ["Apple", "Orange"];
数组中的每个条目都是对另一个数组的引用。由于@data
只是一个数组,我可以使用push
将元素推送到数组的末尾:
push @data, ["a", "b"];
在这里,我正在推送另一个数组引用。如果它更容易理解,我也可以这样做:
my @temp = ("a", "b");
push @data, \@temp;
我创建了一个名为 的数组@temp
,然后将引用推送到@temp
on @data
。
您可以使用Data::Dumper来显示您的结构。这是一个标准的 Perl 模块,所以它应该已经在您的安装中可用:
use strict;
use warnings;
use feature qw(say);
use Data::Dumper;
my @data = (
[ "Hi", "Hello"],
[ "Apple", "Orange"],
);
push @data, ["a", "b"];
say Dumper \@data;
这将打印出:
$VAR1 = [ # @data
[ # $data[0]
'Hi',
'Hello'
],
[ # $data[1]
'Apple',
'Orange'
],
[ # $data[2]
'a',
'b'
]
];