Автор Тема: Количество одинаковых элементов массива  (Прочитано 3761 раз)

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

Оффлайн Aramis

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 2
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Здравствуйте,
никак не могу разобраться с этой задачей:

необходимо посчитать количество одинаковых элементов в массиве.
те есть массив, например:
@dot=qw(1 2 3 6 7 2 1 1 2 6 1);

необходимо вывести такую статистику:
единиц - 4 штуки,
двоек - 3 штуки и тп

при этом надо учесть, что сам массив произвольного размера и количество повторяющихся элементов неизвестно.

Единственно что пришло в голову - скопироваnь массив и сравнивать каждый элемент массива со всеми элементами его копии. Но этот вариант крайне ресурсоёмкий. Наверняка есть какое-то более простое решение.

Специалисты, помогите пожалуйста.
Спасибо большое заранее.

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Количество одинаковых элементов массива
« Ответ #1 : 03 Октября 2005, 11:43:29 »

my $cnt = {};
$cnt->{$_}++ foreach @dot;

use Data::Dumper;
print Dumper($cnt);
0 OK, 0:1

Оффлайн Aramis

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 2
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Количество одинаковых элементов массива
« Ответ #2 : 04 Октября 2005, 16:49:02 »
Many thanx,
всё работает :-)

а вот ещё один вариант подсказали:

my @dot=qw(1 2 3 6 7 2 1 1 2 6 1);
my %hash;
$hash{$_}++ for @dot;
 
print "$_ => $hash{$_}\\n" for sort keys %hash;

 

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