Удалить элемент из списка или массива без (Любого) артефакта в Raku

9

Я просмотрел документацию Raku и несколько книг и учебных пособий, а также несколько сообщений Stackoverflow, чтобы узнать, как аккуратно удалить элемент из списка / массива, т. Е. Без (Любого) вместо удаленного элемента.

my @s = <3 18 4 8 92 14 30>;
my $item = 8; 
my $index =  @s.first($item, :k);
@s[$index]:delete;

Это приводит к [3 18 4 (Любой) 92 14 30], и поэтому я не могу выполнить с ним никаких операций, например, я не могу применить [+]к нему.

Есть ли способ удалить элемент из списка / массива без этого (любой) ?

Ларс Мальмстин
источник

Ответы:

12

Да. Используя сплайсинга метод:

my @s = <3 18 4 8 92 14 30>;
my $item = 8; 
my $index =  @s.first($item, :k);
@s.splice($index,1);
say @s;  # [3 18 4 92 14 30]

Или вы можете использовать модуль Adverb :: Eject , чтобы вы могли написать выше:

use Adverb::Eject;
my @s = <3 18 4 8 92 14 30>;
my $item = 8; 
my $index =  @s.first($item, :k);
@s[$index]:eject;
say @s;  # [3 18 4 92 14 30]
Элизабет Маттийсен
источник