2

我希望能够将数组放入数组中。例如,我可能有一个这样的数组:

my @array1 = ("element 1","element 2","element 3");

然后我有另一个数组

my $array_ref = ["this will", "go between", "element 1 and 2"];

我想$array_ref放入第一个数组,使第一个数组看起来像这样:

("element 1",["this will", "go between", "element 1 and 2"],"element 2","element 3")

我似乎无法做到这一点。我查遍了谷歌,一无所获。

4

6 回答 6

7

因此,您使用splice用您想要的元素替换以元素 1(第二个元素,第一个是元素 0)开头的 0 个元素:

splice( @array, 1, 0, ["this will", "go between", "element 1 and 2"] );

或者你的意思可能是:

splice( @array, 1, 0, "this will", "go between", "element 1 and 2" );

如果您不想要嵌套数组。

于 2009-06-22T03:28:29.563 回答
4

要记住的重要一点是 () 和 [] 之间的区别。'()' 给你一个元素列表,例如。(1, 2, 3) 然后您可以将其分配给数组变量,如下所示 -

my @listOfElem = (1, 2, 3);

'[]' 是一个数组引用并返回一个标量值,您可以将其合并到您的列表中。

my $refToElem = ['a', 'b', 'c'];

在您的情况下,如果您正在初始化第一个数组,那么您可以像这样简单地插入第二个数组元素,

my @listOfElem = (1, 2, ['a', 'b', 'c'], 3);
#This gives you a list of "4" elements with the third
#one being an array reference

my @listOfElem = (1, 2, $refToELem, 3);
#Same as above, here we insert a reference scalar variable

my @secondListOfElem = ('a', 'b', 'c');
my @listOfElem       = (1, 2, \@secondListOfElem, 3);
#Same as above, instead of using a scalar, we insert a reference
#to an existing array which, presumably, is what you want to do.

#To access the array within the array you would write -
$listOfElem[2]->[0]  #Returns 'a'
@{listOfElem[2]}[0]  #Same as above.

如果您必须在数组中间动态添加数组元素,那么只需使用其他帖子中详述的“拼接”。

于 2009-06-22T05:10:13.087 回答
3

这是您在学习完Intermediate Perl的第一部分后会理解的东西,该部分涵盖了引用和数据结构。您还可以查看Perl 数据结构说明书

简而言之,您可以使用引用(它只是一个标量)将一个数组存储在另一个数组中:

my @big_array = ( $foo, $bar, \@other_array, $baz );

在您的情况下,您使用了匿名数组构造函数,并且只想将其拼接到现有数组中。它是一个数组引用并没有什么特别之处:

splice @big_array, $offset, $length, @new_items;

在您的情况下,您想从元素 1 开始,删除 0 个项目,并添加您的参考:

splice @big_array, 1, 0, $array_ref;
于 2009-06-22T13:36:27.907 回答
1

尝试使用一个临时数组,如下所示:

@temp_arr = ("this will", "go between", "element 1 and 3");
@my_arr = ("element 1", \@temp_arr, "element 3");

您可以像这样使用子元素:

print $my_arr[1]->[0]; # prints 'this will'

像这样引用子数组:

print @$my_arr[1]; # Right! Prints 'this willgo betweenelement 1 and 2'

# Don't do this:
print $my_arr[1]; # Wrong! Prints something like: 'ARRAY(0xDEADBEEF)'
于 2009-06-22T03:18:52.267 回答
1

你所拥有的是一个数组和一个数组引用。

#!/usr/bin/perl

use strict;
use warnings;

my @array    = ("element 1","element 2","element 3");
my $arrayref = ["this will", "go between", "element 1 and 2"];

splice( @array, 1, 0, $arrayref );  # Grow the array with the list (which is $arrayref)

for ( my $i = 0; $i <= $#array; $i++ ) {
    print "\@array[$i] = $array[$i]\n";
}
于 2009-06-22T04:35:10.067 回答
1

使用拼接

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @array1 = ("element 1", "element 2", "element 3");
my $array_ref = ["this will", "go between", "element 1 and 2"];
splice(@array1, 1, 0, $array_ref);
print Dumper \@array1;

这将打印以下内容:

$VAR1 = [
          'element 1',
          [
            'this will',
            'go between',
            'element 1 and 2'
          ],
          'element 2',
          'element 3'
        ];
于 2009-06-22T13:43:28.890 回答