{{tag> note:perl map grep splice for}}
---json
{
"title":"mapとgrepを比べる",
"description":"mapとgrepを比べる"
}
---
\\
==== mapとgrepを比べる(map/grep) ====
\\
=== (1) 特定の値の削除(grepを使う) ===
grepは条件に該当するものの値は返し、該当しないものは返さない。\\
use Data::Dumper;
@order = (3, 4 ,6);
$delete_value = 4; # 削除する値
@order = grep { $_ != $delete_value } @order;
print Dumper(@order)."\n";
結果\\
$VAR1 = 3;
$VAR2 = 6;
=== (2) 特定の値の初期化(mapを使う) ===
mapは条件に該当するものと該当しないものを区別して返す。\\
use Data::Dumper;
@order = (3, 4 ,6);
$delete_value = 4; # 削除する値
@order = map { $_ != $delete_value ? $_ : undef } @order;
print Dumper(@order)."\n";
結果\\
$VAR1 = 3;
$VAR2 = undef;
$VAR3 = 6;
=== (3) 特定の値の削除(grepを使わずspliceとforを使う) ===
spliceは要素位置を指定して削除することができるが、値に一致したものを削除するためには、値の該当する要素位置を調べる必要がある。\\
先頭から後方に進むと、削除したときに評価対象の位置がくるってしまうので、後方から先頭に向かって処理するところがポイント。\\
use Data::Dumper;
@order = (3, 4 ,6);
$delete_value = 4; # 削除する値
for (my $i=$#order; $i>=0; $i--) {
splice(@order, $i, 1) if ($order[$i] == $delete_value);
}
print Dumper(@order)."\n";
結果\\
$VAR1 = 3;
$VAR2 = 4;
$VAR3 = 6;
$VAR1 = 3;
$VAR2 = 6;
$VAR1 = 3;
$VAR2 = 6;
$VAR1 = 3;
$VAR2 = 6;
~~DISCUSSION~~