Perl - объединить элементы массива до указанной длины - PullRequest
2 голосов
/ 09 марта 2020

У меня есть массив строк, длина которых может быть от 1 до 20. Мне нужно объединить первые 3 элемента массива в строку. Я использовал.

@a = ("Hello","world","welcome");
$b = join(":",@a[0..2])

Это дает желаемый результат Hello: World: welcome

Но когда длина массива меньше 3, скажем @a = ("hello","wolrd")

Я получаю Hello: world: в качестве вывода. Если у меня есть 1 переменная, я получаю Hello:: в качестве вывода.

Я хочу ограничить объединение на основе длины массива. Есть ли выход для этого?

Ответы [ 3 ]

5 голосов
/ 09 марта 2020

С List :: Util 1.50 или новее вы получаете функцию head , которая хороша для такого рода вещей, поскольку она будет возвращать только количество элементов в списке.

use strict;
use warnings;
use List::Util 1.50 'head';
my @array = ('hello', 'world');
my $joined = join ':', head 3, @array; # hello:world

Функция splice может служить в качестве головы / хвоста бедного человека, но для нее требуется специальный массив, и она удалит возвращенные элементы из этого массива.

use strict;
use warnings;
my @array = ('hello', 'world');
my $joined = join ':', splice @array, 0, 3; # hello:world
# @array is now empty
5 голосов
/ 09 марта 2020

Можно также проверить размер массива и присоединить, что вы хотите, или весь массив

my $joined = join ':', (@ary > 3 ? @ary[0..2] : @ary);
1 голос
/ 09 марта 2020

Вам нужно grep, чтобы отфильтровать значения undef.

my $b = join(":", grep defined, @a[0..2]);

Обратите внимание, что это позволит значения с пустой строкой q{}.

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