1. ホーム
  2. perl

[解決済み] Perlで配列を比較するにはどうしたらいいですか?

2022-02-08 08:04:47

質問

2つの配列があります。 @a@b . 2つの配列の要素を比較したい。

my @a = qw"abc def efg ghy klm ghn";
my @b = qw"def ghy jgk lom com klm";

一致する要素があれば、フラグを設定する。これを行うための簡単な方法はありますか?

どのように解決するのですか?

まず、2つの配列が正しく記述されている必要があります。

@a = ("abc","def","efg","ghy","klm","ghn");
@b = ("def","efg","ghy","klm","ghn","klm");

次に、任意の配列(例えば、要素が他のデータ構造への参照である可能性がある配列)に対しては、以下のように使用することができます。 Data::Compare .

要素がスカラーである配列の場合、比較を行うには List::MoreUtils pairwise BLOCK ARRAY1 ARRAY2 ここで、BLOCKは比較のサブルーチンです。をエミュレートすることができます。 pairwise (List::MoreUtilsにアクセスできない場合) 経由で。

if (@a != @b) {
    $equals = 0;
} else {
    $equals = 1;
    foreach (my $i = 0; $i < @a; $i++) {
        # Ideally, check for undef/value comparison here as well 
        if ($a[$i] != $b[$i]) { # use "ne" if elements are strings, not numbers
                                # Or you can use generic sub comparing 2 values
            $equals = 0;
            last;
        }
    }
}

追伸:よくわからないのですが リスト::比較 は常にリストをソートすることができます。二者択一の比較ができるかどうかはわかりません。