Wednesday, January 18, 2012

Количество одинаковых элементов массива http://forum.codenet.ru/archive/index.php/t-20845.html


Aramis
03.10.2005, 11:25
Количество одинаковых элементов массива

Здравствуйте,
никак не могу разобраться с этой задачей:

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

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

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

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

Специалисты, помогите пожалуйста.
Спасибо большое заранее.
3D Bob
03.10.2005, 12:47
Я очень давно изучал Перл, и его уже мало помню и мало того у меня нету сейчас его интерпретатора.
Но на сях я бы сделал так. Более опитмального и лучшего способа это сделать, я не вижу.



#pragma hdrstop
#include <iostream.h>
#include <vector.h>
//---------------------------------------------------------------------------
struct tabl{
char simbol;
int cout;
};
#pragma argsused
int main(int argc, char* argv[])
{
char st[] = "aaalkjasdhkwebsdfl;j";
vector<tabl> t;

for (int i=0; i<sizeof(st); i++){
bool z = false;
for (unsigned int j=0; j<t.size(); j++)
if (t[j].simbol == st[i]){
t[j].cout++;
z = true;
}
if (!z){
tabl s = {st[i],1};
t.push_back(s);
}
}
for (unsigned int j=0; j<t.size(); j++)
cout << t[j].simbol << "-" << t[j].cout << endl;
cin >> "";
return 0;
}
squirL
04.10.2005, 15:06
все проще гораздо...


#!/usr/bin/perl

@array = qw(1 2 1 1 5 6 7 8 9 1 2 3);

foreach $element (@array)
{
$hash{$element}++;
}

foreach $element (sort keys(%hash))
{
print "$element = $hash{$element}\n";
}


3D Bob
улыбнул...
Aramis
04.10.2005, 17: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;
3D Bob
04.10.2005, 19:11
Originally posted by squirL
все проще гораздо...


#!/usr/bin/perl

@array = qw(1 2 1 1 5 6 7 8 9 1 2 3);

foreach $element (@array)
{
$hash{$element}++;
}

foreach $element (sort keys(%hash))
{
print "$element = $hash{$element}\n";
}


3D Bob
улыбнул...

Да этот способ мне знаком. Но я его проигнорил.
Почему улыбнул?? Ты в курсе что что
$hash{$element}++;
В своем внутреннем алгоритме выполняет тоже самое что и мой код?
squirL
04.10.2005, 22:45
Originally posted by 3D Bob
Да этот способ мне знаком. Но я его проигнорил.
Почему улыбнул?? Ты в курсе что что
$hash{$element}++;
В своем внутреннем алгоритме выполняет тоже самое что и мой код?

да. правда насчет "тоже самое" не уверен. не видел реализации :)
что улыбнуло? не обижайся, но зачем на просьбу написать перловый код давать реализацию на С++? чтобы автор "переводом" занимался?
3D Bob
04.10.2005, 22:54
Originally posted by squirL
да. правда насчет "тоже самое" не уверен. не видел реализации :)
что улыбнуло? не обижайся, но зачем на просьбу написать перловый код давать реализацию на С++? чтобы автор "переводом" занимался?
Хотел показать алгоритм.
alex410
16.06.2009, 19:31
#!/usr/bin/perl

@array = qw(1 2 1 1 5 6 7 8 9 1 2 3);

foreach $element (@array)
{
$hash{$element}++;
}

foreach $element (sort keys(%hash))
{
print "$element = $hash{$element}\n";
}



Может кто-нибудь перевести это в PHP

Спасибо большое заранее.
k0t
17.06.2009, 13:18
Если максимально приближено к приведенному коду, то так:


<?php
$array = Array(1,2,1,1,5,6,7,8,9,1,2,3);

foreach ($array as $element)
{
$hash[$element]++;
}

ksort($hash);
foreach ($hash as $element => $count)
{
echo $element." = ".$count."\n";
}
?>

только интерпретатор закидает нотисами
alekciy
19.06.2009, 00:55
Хотел показать алгоритм.
Ты бы понял алгоритм, если ты тебе дали его словестное описание на японском (идише, латинском, etc)? Не думаю... тут так же.
Phodopus
19.06.2009, 11:31
Эу! Первые 7 постов от 2005 года :)
alekciy
19.06.2009, 15:52
Эу! Первые 7 постов от 2005 года :)
Блин, как-то не заметил...

"Твою ж мать!..." (с) Э. Картман

... чертовы некропостеры :mad:

No comments:

Post a Comment