Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Группировка


Страницы:   1 2

антон1243232 ©   (2009-02-26 15:40:00) 

Привет всем.

Подскажите как можно сгруппировать одинаковые строки и показать кол-во совподений.
т.е

есть список:
Вася
Вася
Вася
Петя
Петя

Надо сгруппировать так чтоб было :
Вася(3)
Петя(2)


KSergey   (2009-02-27 09:11:00) [1]

> sco   (27.02.09 08:57) [21]
> Я думаю с етим автор темы и сам бы разобрался =)

выражаю сомнение. Если б мог - исходного выпроса тем более бы не было.


Palladin   (2009-02-27 09:03:00) [2]

какая же она у тебя маленькая... почитай, кстати, про downto на досуге


sco   (2009-02-27 08:57:00) [3]

ну да тут промашка. сделать не for i:=1 to SS1.items.count-1 do
а
i:=0;
repeat
...
Dec(i);
...

until i>SS1.items.count-1;

Я думаю с етим автор темы и сам бы разобрался =) компилировать всё подряд голова взорвётся =)


KSergey   (2009-02-27 08:29:00) [4]

> sco   (27.02.09 08:22) [19]
> for i:=1 to SS1.items.count-1 do
...
>   SS1.items.delete(t-1);  

это превед, эти строчки несовместимы никогда, запомните это.
Ну и не плохо бы компилировать свои примеры и запускать их - тогда сразу все и увидите.


sco   (2009-02-27 08:22:00) [5]

аа я неправильно понял товарисча =)
ну тогда так
for i:=1 to SS1.items.count-1 do
begin
count:=0;
t:=i+1;
repeat
 if SS1.items.strings[t-1]=SS1.items.strings[i-1] then begin
  Inc(count);
  Dec(t);
  SS1.items.delete(t-1);    
  SS1.items.srtings[i-1]:=SS1.items.strings[i-1]+'('+IntToStr(count)+')';
 end;
 Inc(t);
until t>SS1.items.count
end;


sco   (2009-02-27 08:18:00) [6]

for i:=1 to SS1.items.count do
begin
count:=0;
for t:=1 to SS2.items.count do
 if SS2.items.strings[t-1]=SS1.items.strings[i-1] then Inc(count);
SS1.items.srtings[i-1]:=SS1.items.strings[i-1]+'('+IntToStr(count)+')';
end;


KSergey   (2009-02-27 07:35:00) [7]

> {RASkov} ©   (26.02.09 19:46) [15]
> В обjectах будет кол-во совпадений....

только не забыть тогда до else вставить прописывание единички objects[] для добавляемой строки


Anatoly Podgoretsky   (2009-02-26 19:56:00) [8]

> антон1243232  (26.02.2009 19:23:14)  [14]

Идея простая, группировка делается простым проходом по списку и сравнением с предыдущим. Никаких IndexOf не требуется.


{RASkov}   (2009-02-26 19:46:00) [9]

> [14] антон1243232   (26.02.09 19:23)
> я понимаю что можно использовать
>
> else

например,
if index < 0 then
listbox1.items.add(s)
else
listnox1.items.objects[index]:=tobject(integer(listbox1.items.objects[index]+1);

В обjectах будет кол-во совпадений....


антон1243232   (2009-02-26 19:23:00) [10]

по IndexOf понятно я исключаю схожие элементы но как быть с кол-вом совпадений?
s= значение меняется в него поступает то вася то петя то федя

index:=listbox1.items.IndexOf(s);
if index =-1 then
listbox1.items.add(s);

а вот как быть с кол-вом совпадений?
я понимаю что можно использовать

else

У кого какие идеи ??...


Anatoly Podgoretsky   (2009-02-26 17:01:00) [11]

> sniknik  (26.02.2009 16:41:11)  [11]

О смене порядка речь не шла, это же кардинально меняет результат группирования, для группировки не требуется сортировка, она вредна, на вход группировки должны поступать готовые данные.


Сергей М.   (2009-02-26 16:41:00) [12]


> clickmaker ©   (26.02.09 16:36) [10]


Можно и одним обойтись, если не грузить его абы как сломя голову)


sniknik   (2009-02-26 16:41:00) [13]

> ... IndexOf ...
неудобно, проще сделать sort, и после "цикл if = ...".


clickmaker   (2009-02-26 16:36:00) [14]

> [5] антон1243232   (26.02.09 16:00)
> строки находятся в StringList

нужен второй стринг лист
цикл, IndexOf, if и +


Игорь Шевченко   (2009-02-26 16:11:00) [15]


> может у кого-то есть готовый набросок?..


готовый набросок иф-a

if

готовый набросок плюса

+


Сергей М.   (2009-02-26 16:10:00) [16]


> строки находятся в StringList
>


А "сгруппированные" строки в результате где должны оказаться ?


Anatoly Podgoretsky   (2009-02-26 16:05:00) [17]

> Palladin  (26.02.2009 16:03:06)  [6]

Для зачета


Palladin   (2009-02-26 16:03:00) [18]

А зачем тебе это нужно?


антон1243232   (2009-02-26 16:00:00) [19]

строки находятся в StringList


clickmaker   (2009-02-26 15:59:00) [20]

где строки-то находятся?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо