在perl中如何将数组元素从一个数组放到另一个数组中?

csga3l58  于 2022-11-15  发布在  Perl
关注(0)|答案(4)|浏览(216)

如果我有一个包含行的@array

row 1: a   b

row 2: b   c

row 3: c   d

如何获得一个新的@array2,其中所有元素都在一列中,即@array2 = a b b c c d

s71maibg

s71maibg1#

您的问题措辞有些含糊,这可能是因为您是perl新手。您还没有提供perl语法中的输入或预期输出,但根据您对之前答案的回答,我将进行猜测:

##  three rows of data, with items separated by spaces
my @input = ( 'a b', 'b c', 'c d' );

## six rows, one column of expected output
my @expected_output = ( 'a', 'b', 'b', 'c', 'c', 'd' );

将此作为预期的输入和输出,编写转换代码的一种方法是:

##  create an array to store the output of the transformation
my @output;

##  loop over each row of input, separating each item by a single space character
foreach my $line ( @input ) {
    my @items = split m/ /, $line; 
    push @output, @items;
}

##  print the contents of the output array
##    with surrounding bracket characters
foreach my $item ( @output ) {
    print "<$item>\n";
}

有关splitpush详细信息,请参阅perldoc。

bttbmeg0

bttbmeg02#

my @array_one = (1, 3, 5, 7);
my @array_two = (2, 4, 6, 8);

my @new_array = (@array_one, @array_two);
weylhg0b

weylhg0b3#

这里有另一个选项:

use Modern::Perl;

my @array = ( 'a b', 'b c', 'c d' );
my @array2 = map /\S+/g, @array;

say for @array2;

输出量:

a
b
b
c
c
d

map@array中的列表进行操作,对其中的每个元素应用正则表达式(匹配非空白字符),以生成一个新列表,并将其放入@array2中。

6ie5vjzr

6ie5vjzr4#

对初始数据的另一种可能的解释是,你有一个数组引用的数组。这“看起来”像一个2D数组,因此你会谈论“行”。如果是这种情况,那么试试这个

#!/usr/bin/env perl

use warnings;
use strict;

my @array1 = (
  ['a', 'b'],
  ['b', 'c'],
  ['c', 'd'],
);

# "flatten" the nested data structure by one level
my @array2 = map { @$_ } @array1;

# see that the result is correct
use Data::Dumper;
print Dumper \@array2;

相关问题