Forum Webscript.Ru

Программирование => Perl => Тема начата: Aramis от 03 Октября 2005, 11:22:48

Название: Количество одинаковых элементов массива
Отправлено: Aramis от 03 Октября 2005, 11:22:48
Здравствуйте,
никак не могу разобраться с этой задачей:

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

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

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

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

Специалисты, помогите пожалуйста.
Спасибо большое заранее.
Название: Количество одинаковых элементов массива
Отправлено: ondr от 03 Октября 2005, 11:43:29

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

use Data::Dumper;
print Dumper($cnt);
Название: Количество одинаковых элементов массива
Отправлено: Aramis от 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;