在没有 Raku 中的 (Any) 人工制品的情况下从列表或数组中删除一个元素
Delete an element from a list or array without the (Any) artefact in Raku
我搜索了 Raku 文档和几本书籍和教程以及几篇 Whosebug 帖子,以了解如何从 list/array cleanly 中删除项目,即没有(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 (Any) 92 14 30] 所以我无法对其进行任何操作,例如我无法在其上应用 [+]
。
有没有办法从 list/array 中删除一个项目而不需要 (任何)?
是的。使用 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]
我搜索了 Raku 文档和几本书籍和教程以及几篇 Whosebug 帖子,以了解如何从 list/array cleanly 中删除项目,即没有(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 (Any) 92 14 30] 所以我无法对其进行任何操作,例如我无法在其上应用 [+]
。
有没有办法从 list/array 中删除一个项目而不需要 (任何)?
是的。使用 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]