Автор Тема: Разница массивов  (Прочитано 2438 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
Разница массивов
« : 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;

Но кажется я перемудрил... %)

Может можно проще (только не циклы)?

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Разница массивов
« Ответ #1 : 22 Января 2005, 20:02:00 »
Phoinix посмотри Perl Cookbook:
Finding Elements in One Array but Not Another (млин, там старое издание какое-то)

Вариант без циклов:

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);

тут по-любому лучше сделать хеш на основании какого-нибудь массива, а потом сравнивать на существование ключей, чем делать перебор одного массива для каждого значения другого массива (как у тебя)
 в исканиях.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28