タグ

arrayに関するwittroのブックマーク (2)

  • 一次元配列同士の比較のいろいろなやり方 - harupiyoの日記

    問題 @a = (1,2,3); @b = (1,2,3); のような配列があったとして、これらの中身が同じ(@a = @b) であることを確認したいと思います。 細かい条件として、値は正の数字のみ(負はない、)で並び順は気にしない、かつ同じ番号はないという事にします。 かんたんに考えると、次の二つの条件を満たせればいいはずです。 二つの要素の数が同じであること 先頭から比較して、末尾までの各項目の内容が等しいこと 素直にコーディングすると... sub is_same($$){ my($a,$b) = @_; # (1)二つの要素の数が同じであること return 0 if @$a != @$b; # (2)先頭から比較して、末尾までの内容が等しいこと for (0..$#$a){ return 0 if $a->[$_] != $b->[$_]; } return 1; } というサブ

    一次元配列同士の比較のいろいろなやり方 - harupiyoの日記
  • なぜ Perl で配列に対して defined を使ってはいけないのか?

    defined の挙動で相談されたのでソースコードを見てみたら、配列に対して defined を呼んでいた。 最近の Perl では配列に対して defined を使うのは非推奨である(perldata や perlfunc 参照)。 ほとんどの人が望むような判定結果は返ってこない*1。 perl -e '@a = (); print defined @a ? 1 : 0; push @a, 1; print defined @a ? 1 : 0; shift @a; print defined @a ? 1 : 0' 配列が空かどうかならスカラーコンテキストで評価するだけで OK なのだが、Perl プログラミング経験上、1度は defined を使用してしまうだろう。 ただ通常は警告が出るのですぐ気がつく。 この警告は Perl 5.6.0 以降で出る。 #!/usr/bin/perl

    なぜ Perl で配列に対して defined を使ってはいけないのか?
    wittro
    wittro 2012/07/11
    まったく同じハマり方してた
  • 1