URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 1938
[ Назад ]

Исходное сообщение
"Вычитание массивов"

Отправлено Dr. Nebula , 31-Июл-03 11:12 
Привет!
Подскажите, как можно в Перле вычесть массив из массива?
Имеется два массива, больший и меньший. Нужно найти все записи в большем массиве, которые отсутствуют в меньшем.

Содержание

Сообщения в этом обсуждении
"Вычитание массивов"
Отправлено ola , 31-Июл-03 14:47 
Вот, как вариант:

@arr1=( elements1 );
@arr2=( elements2 );
my %hash;
my @res;

for (@arr1) {
    $hash{$_}+=1;
}

for (@arr2) {
    $hash{$_}+=2;
}

for (keys %hash) {
    push @res, $_ if $hash{$_}==1;
}

В массиве @res - элементы массива @arr1, к-рых нет в @arr2


"Вычитание массивов"
Отправлено konst , 31-Июл-03 18:15 
>Вот, как вариант:
>
>@arr1=( elements1 );
>@arr2=( elements2 );
>my %hash;
>my @res;
>
>for (@arr1) {
> $hash{$_}+=1;
>}
>
>for (@arr2) {
> $hash{$_}+=2;
>}
>
>for (keys %hash) {
> push @res, $_ if $hash{$_}==1;
>}
>
>В массиве @res - элементы массива @arr1, к-рых нет в @arr2
Не проще ли

foreach (@small) { $h{$_} = 1 }
foreach (@big) {
unless ($h{$_}) { push(@res) }


"Вычитание массивов"
Отправлено ola , 01-Авг-03 01:11 
>Не проще ли
>
>foreach (@small) { $h{$_} = 1 }
>foreach (@big) {
>unless ($h{$_}) { push(@res) }

Проще ;)
просто, первое, что пришло в голову


"Вычитание массивов"
Отправлено konst , 31-Июл-03 14:49 
>Привет!
>Подскажите, как можно в Перле вычесть массив из массива?
>Имеется два массива, больший и меньший. Нужно найти все записи в большем
>массиве, которые отсутствуют в меньшем.
перебор (FOREACH) + перебор (FOREACH) - сравнение значений - создание 3-го массива. Но в этих случаях грамотнее использовать ХЭШ, а не массив.


"Вычитание массивов"
Отправлено Dr. Nebula , 01-Авг-03 16:26 
Всем большой тенькс :)