插入数组perl数组

时间:2013-08-08 17:48:31

标签: perl

我有一个数组数组

@data = [["Hi", "Hello"],["Apple", "Orange"]];

我需要插入一个新数组

  

@a = [“a”,“b”];

我希望数组@data看起来像这样

@data = [["Hi", "Hello"],["Apple", "Orange"], ["a", "b"]];

我该怎么做?

2 个答案:

答案 0 :(得分:6)

键入

[ "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'
          ]
        ];

似乎你的期望,不是吗?


请参阅perldoc perlreftut

答案 1 :(得分:2)

你有:

@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的引用推送到@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'
      ]
    ];