P20 - Remove the K'th element from a list.
Author: Philip Potter
Specification
P20 (*) Remove the K'th element from a list. You may choose to mutate the array in-place or create a new sequence and return it.
Examples
Example 1 (mutating in-place):
> my @l = <a b c d>; > remove-at(@l,2); > say ~@l; a c d
Example 2 (returning a copy):
> say ~remove-at-copy(<a b c d>, 2); a c d
Source code: P20-rhebus.pl
use v6; # a. Simple version, in place # @array - your "@array" must always use "@" - even for a single element # .splice - Your array is also an object, you can call the method .splice # - offset - where to remove (starting 0) # - length - how many to remove # - What to add in its place (nothing in this case, see P21-scottp.pl # for an example of adding) my @array = <a b c d>; @array.splice(1, 1); say ~@array; # b. Using a sub in-place # @arr is declared with "is rw", so if you splice on the actual array, not a # copy of it, you will mutate the caller's copy. sub remove-at (@arr, Int $pos) { @arr.splice($pos - 1, 1); return; } my @array2 = <a b c d>; remove-at(@array2, 2); say ~@array2; # Alternatively, call using pseudomethod syntax: @array2.&remove-at(2); say ~@array2; # c. Using a sub, returning a copy # This time we must copy the sequence and mutate that # -- easy-peasy with the "is copy" declaration sub remove-at-copy(@list is copy, $pos) { @list.splice($pos-1, 1); return @list; } say ~remove-at-copy(<a b c d>, 2); # and again pseudomethod syntax say ~<a b c d>.&remove-at-copy(2);