- ベストアンサー
配列Aから配列Bを削除
配列Aから配列Bを削除したいのですが 一番スマートな方法はどんな方法でしょうか? 1件1件確認するしかないのでしょうか? ちなみにBのリストはAにあるとは限りません。 A:1 2 3 B:2 3 4 だったら A:1 にしたいのです。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
短いコードでという意味なら、次のような方法があります。 my @array_a = (1, 2, 3); my @array_b = (2, 3, 4); @array_a = grep { "@array_b" !~ /\b$_\b/ } @array_a; 配列が大きい場合は、"@array_b" を変数に入れたほうがよいかもしれません。 また、配列の内容によっては、/\b$_\b/ の部分を変える必要があります。 ちなみに、!~ を =~ に変更すると共通した要素を抜き出すことができます。
その他の回答 (1)
- sakusaker7
- ベストアンサー率62% (800/1280)
スマートの基準がわかりませんが、わたしなら use strict; use warnings; use List::Compare qw/get_unique/; my @list_a = (1, 2, 3); my @list_b = (2, 3, 4); my $lc = List::Compare->new(\@list_a, \@list_b); my @list_c = $lc->get_unique; print join(':', @list_c), "\n"; とでもするでしょうか。 List::Compareは標準モジュールではないので 別途インストールする必要はありますけど。 基本的には全要素をなめていかないといけないでしょうね。 ハッシュを使うとかで効率を上げる方法はありますが。