空の配列が空の配列か確認する方法は?

次のHokkaido.pm Casualのネタに良いなーって思って見てたんだけど、
テストを通すだけなら、こんな感じだと思います。

perlの複数の配列をこんな風に並び替えたいんです – 鈍足ランナーのIT日記
http://dokechin.hatenablog.com/entry/2014/03/07/213446

package Sort {
    use strict;
    use warnings;

    sub sort {
        my @sorted;
        my $total = 0;

        for my $item(@_){
            $total = $total + scalar(@$item);
        }

        until( $total ==  scalar @sorted){ 
            foreach (@_) {
                if (my $hit = shift (@$_)){
                    push @sorted , $hit;
                }
            }
        }

        return @sorted;
    }
}

use Test::More;
use Sort;

my $aaa = [1,3];
my $bbb = [1,3];
my $ccc = [1,3,5];
my $ddd = [1,3,4,8];
my @expected = ( 1,1,1,1,3,3,3,3,5,4,8);

is(Sort::sort ($aaa,$bbb,$ccc,$ddd), @expected, "sort 4 list");

my @got = Sort::sort ([],[]);
is_deeply( \@got, [], "sort 2 list empty");

done_testing;

追記 2014/03/11
配列を期待する書き方って意味では、これでも良さそう。
余計な代入もなくなって、こっちの方が良いですね。

package Sort {
    use strict;
    use warnings;
 
    sub sort {
        my @sorted;
        my $total = 0;
 
        for my $item(@_){
            $total = $total + scalar(@$item);
        }
 
        until( $total ==  scalar @sorted){ 
            foreach (@_) {
                if (my $hit = shift (@$_)){
                    push @sorted , $hit;
                }
            }
        }
 
        return @sorted;
    }
}
 
use Test::More;
use Sort;
 
my $aaa = [1,3];
my $bbb = [1,3];
my $ccc = [1,3,5];
my $ddd = [1,3,4,8];
my @expected = ( 1,1,1,1,3,3,3,3,5,4,8);
 
is(Sort::sort ($aaa,$bbb,$ccc,$ddd), @expected, "sort 4 list");
is_deeply( [Sort::sort ([],[])], [], "sort 2 list empty");
 
done_testing;

他にも良い方法があれば、ネタ元へどうぞ。

おしまい。

Leave a Comment