CPAN

Mar 09, 2007 19:28

Довольно спонтанно наваял и зарелизил модуль Array::Utils. Модуль содержит функции, вычисляющие объединение, пересечение и разницу между списками. Ничего нового, но я удивлен, что такого модуля на CPAN еще не было.
описание под катом )

ништяк, perl, программизм

Leave a comment

Comments 6

inetman March 9 2007, 21:01:07 UTC
Может, потому что это всё всем всегда было проще слелать ручками, и это только ты такой ленивый, что модуль для этого наваял? =)

Reply


mrgatsby March 11 2007, 17:57:19 UTC
А List::Compare - это разве не то же самое?

Reply

zmij_r March 12 2007, 11:40:45 UTC
там интерфейс излишне замороченный.

Reply


sharifulin March 22 2007, 14:12:03 UTC
Да-а, сильный модуль получился, особенно по функционалу - три функции, 107 строк вместе с POD :)

Вообще-то, на CPAN для работы со списка есть линия List, самый популярный модуль List::Util, дополнение к нему List::MoreUtils.
В последнем есть uniq. Также есть такой же сильный модуль - List::Uniq и т.д.

На практике я такие вещи делаю руками, из выше перечисленного использую только List::Util.

Reply


sharifulin March 22 2007, 14:37:05 UTC
В твоем модуле явное ограничение - операцию можно проводить только с 2мя списками.
Получается результат функции intersect не возможно использовать в другой такой же:

intersect(@c, intersect(@a, @b))

только так:

my @ab = intersect(@a, @b);
print intersect(@c, @ab);

Вместо такой строки:

sub intersect {
my %e; $e{$_}++ foreach map { @$_ } @_;
return sort grep {$e{$_} == @_} keys %e;
}
print intersect(\@a,\@b,\@c,\@d);

# array_diff
sub array_diff {
my %e; $e{$_}++ foreach map { @$_ } @_;
return sort grep {$e{$_} == 1} keys %e;
}
print intersect(\@a,\@b,\@c,\@d);

Reply

sharifulin March 22 2007, 16:44:54 UTC
но это как вариант, решений множество.
There is more than one way to do it.

Reply


Leave a comment

Up