Перестановка массивов в Perl - PullRequest
0 голосов
/ 02 февраля 2012

Извиняюсь за простой вопрос, но я очень плохо знаком с Perl! У меня есть массив с именем @input, который содержит следующие данные (обратите внимание, что размер @input не всегда будет одинаковым):

[0]  20004 11189 20207
[1]  12345 1234 123 12 1

Я хотел бы создать новый массив с именем @elements, который переставляет данные так:

[0] 20004
[1] 11189
[2] 20207
[3] 12345
[4] 1234
[5] 123
[6] 12
[7] 1

Спасибо!

Ответы [ 3 ]

2 голосов
/ 02 февраля 2012

Ну, это либо одномерный массив, который нужно разделить, либо двумерный, который нуждается в выравнивании.Итак, вот подпункт для каждой задачи.

use v5.10;
use strict;
use warnings;

my @input1 = ("20004 11189 20207", "12345 1234 123 12 1");
my @input2 = ([qw"20004 11189 20207"], [qw"12345 1234 123 12 1"]);

sub one_dim { # Simple extract digits with regex
    return map /\d+/g, @_;
    # return map split, @_;  # same thing, but with split
}
sub two_dim { # Simple expand array ref
    return map @$_, @_;
}

my @new = one_dim(@input1);
say for @new;
@new = two_dim(@input2);
say for @new;
1 голос
/ 02 февраля 2012

Более эффективно, чем ответ Джона:

@output = map { split / / } @input;
0 голосов
/ 02 февраля 2012
$tmparr = join(" ", @input);
@elements = split(" ", $tmparr);

Это работает?

Редактировать: TLP предоставил намного лучшее решение в комментарии ниже, map split, @input

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...