![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Группировка
антон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]где строки-то находятся?