Удалить элемент из списка или массива без (Любого) артефакта в Raku - PullRequest
9 голосов
/ 26 февраля 2020

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

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] , поэтому я не могу выполнить с ним никаких операций, например Я не могу применить [+] к нему.

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

1 Ответ

12 голосов
/ 26 февраля 2020

Да. Используя метод splice :

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]
...