X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FMoose%2FAutobox%2FArray.pm;h=c58198e53c8bbd8c527c493451ad462d69a3de07;hb=5dc78481c68dda42ebd534e4f40b0c8820ecd384;hp=1b31e90a841850cf6d2ccbbe49467784f47b2670;hpb=e6bb88b0e1fff9794352dde571e623ae0f4e3a95;p=gitmo%2FMoose-Autobox.git diff --git a/lib/Moose/Autobox/Array.pm b/lib/Moose/Autobox/Array.pm index 1b31e90..c58198e 100644 --- a/lib/Moose/Autobox/Array.pm +++ b/lib/Moose/Autobox/Array.pm @@ -37,7 +37,46 @@ sub sort { my ($array, $sub) = @_; $sub ||= sub { $a cmp $b }; [ CORE::sort { $sub->($a, $b) } @$array ]; -} +} + +# ... + +sub reduce { + my ($array, $func) = @_; + my @a = @$array; + my $acc = CORE::shift @a; + $acc = $func->($acc, $_) foreach @a; + return $acc; +} + +sub zip { + my ($array, $other) = @_; + [ + CORE::map { + [ $array->[$_], $other->[$_] ] + } 0 .. $#{( + CORE::scalar @{$array} < CORE::scalar @{$other} + ? $other : $array + )} + ]; +} + +## + +sub keys { + my ($array) = @_; + [ 0 .. $#{$array} ]; +} + +sub values { + my ($array) = @_; + [ @$array ]; +} + +sub kv { + my ($array) = @_; + [ CORE::map { [ $_, $array->[$_] ] } (0 .. $#{$array}) ]; +} ## Array Interface @@ -72,21 +111,5 @@ sub shift { CORE::shift @$array; } -## - -sub keys { - my ($array) = @_; - [ 0 .. $#{$array} ]; -} - -sub values { - my ($array) = @_; - [ @$array ]; -} - -sub kv { - my ($array) = @_; - [ CORE::map { [ $_, $array->[$_] ] } $array->keys ]; -} 1;