Есть ли способ, которым я могу заменить элемент массива на основе его значения, а не номер элемента с двумя новыми элементами в массиве? - PullRequest
2 голосов
/ 22 декабря 2011

Я программирую на Perl, и я нахожусь в ситуации, когда у меня есть массив, например @contents=(A,S,D,F,M,E), и я хочу заменить элемент M на два новых элемента X и Y, например как @contents будет равно (A,S,D,F,X,Y,E).

Ответы [ 2 ]

10 голосов
/ 22 декабря 2011

Вы можете использовать map.

@contents = map { $_ eq 'M' ? ('X','Y') : $_ } @contents;

Или вы можете использовать splice:

for (0 .. $#contents) {
    if ($contents[$_] eq 'M') {
        splice @contents, $_, 1, 'X', 'Y';
    }
}

Вы также можете упростить дальнейшее упрощение, используя keys @contents в качестве списка индексов, если вы используете Perl версии 5.12 и выше.

2 голосов
/ 22 декабря 2011

Команда, которую вы ищете: splice .

#!/usr/bin/perl -wT
use strict;

my @contents = qw(A S D F M E);
my $match    = 'M';
my @replace  = qw(X Y);
my $arrlen   = @contents;

for (my $i = 0; $i < $arrlen; $i++)
{
    if ($contents[$i] eq $match)
    {
        splice (@contents, $i, 1, @replace);
        last;
    }
}

print "$_\n" foreach (@contents);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...