配列または配列への参照から要素を使用grep
または削除するにはどうすればよいですか?配列への参照から1つ以上の要素を削除するためにmap
使用する際に問題が発生しているので、より良い解決策を提供できるかどうかを確認したいと思います。splice
grep
map
@removedElements = grep /test/, @array;
配列または配列への参照から要素を使用grep
または削除するにはどうすればよいですか?配列への参照から1つ以上の要素を削除するためにmap
使用する際に問題が発生しているので、より良い解決策を提供できるかどうかを確認したいと思います。splice
grep
map
@removedElements = grep /test/, @array;
あなたは"array or reference array"
それが2つの異なることだったように言っています。これは紛らわしいです。
配列@removedElements
に名前を付けたので、質問しようとしているのは、要素をから削除@array
して配置する方法だと思います@removedElements
。
@removedElements = grep /test/, @array;
@array = grep ! /test/, @array;
テストを単純に否定すると、どちらかのリストが生成されます。ループを実行することもできます。
my (@removedElements, @rest);
for (@array) {
if (/test/) {
push @removedElements, $_;
} else {
push @rest, $_;
}
}
これには、実行されるチェックが少ないという利点があります。
を使用するにはsplice
、インデックスを追跡する必要がありますが、この場合、その価値があるかどうかはわかりません。それは確かにあなたのコードを読みやすくすることはありません。同様にmap
、通常のループよりもはるかに役立つとは思えません。
extract_by
の機能も気に入るかもしれませんList::UtilsBy
。渡された配列からアイテムを削除する点を除いて、grep に似ています。
use List::UtilsBy qw( extract_by );
# some values in @array
my @removed = extract_by { m/test/ } @array;
# Matching elements will now be removed from @array and appear in @removed.