Forum Webscript.Ru
Программирование => Perl => Тема начата: Phoinix от 22 Января 2005, 14:36:26
-
Есть дав массива:
@array1 = (\'1\',\'2\',\'3\',\'4\',\'5\',\'6\');
@array2 = (\'2\',\'4\',\'6\',\'7\',\'8\',\'9\');
Нужно получить элементы первого массива значения элементов которого, нет во втором (\'1\',\'3\',\'5\'). У меня получилось такое:
my @array3;
map {my $i = $_; push @array3, $_ unless grep {/$i/} @array2} @array1;
Но кажется я перемудрил... %)
Может можно проще (только не циклы)?
-
Phoinix посмотри Perl Cookbook:
Finding Elements in One Array but Not Another (http://mirrors.usaaa.ru:8001/books/perl2/cookbook/ch04_08.htm) (млин, там старое издание какое-то)
Вариант без циклов:
my @array1 = (\'1\',\'2\',\'3\',\'4\',\'5\',\'6\');
my @array2 = (\'2\',\'4\',\'6\',\'7\',\'8\',\'9\');
my %seen;
@seen {@array1} = ( );
delete @seen {@array2};
my @aonly = keys %seen;
print join(\' \',@aonly);
тут по-любому лучше сделать хеш на основании какого-нибудь массива, а потом сравнивать на существование ключей, чем делать перебор одного массива для каждого значения другого массива (как у тебя)