Вверх ↑
Ответов: 16884
Рейтинг: 1239
#1: 2015-07-03 11:49:08 ЛС | профиль | цитата
3042 писал(а):
Tad писал(а)
А цепочка из StrCase и Delete вообще отстой - сначала варим барана, а потом снимаем с него шкуру.

Такой уж у меня словарь, не стал я его менять, хотя это, конечно, влияет на производительность.
Словарь здесь вообще ни при чем.
Удали лишнее - потом Lower.
------------ Дoбавленo в 11.49:
Когда-то была подобная задача.
Вот сегодня нашёл свой IC и переделал под твою задачу:
Add(MainForm,2953706,21,105)
{
Height=117
Position=1
}
Add(Edit,11872502,84,105)
{
Left=25
Top=15
Width=330
Text="Обороноспособность"
ClearAfterEnter=1
link(onEnter,14826946:doWork,[])
}
Add(Label,6505962,231,112)
{
Left=30
Top=50
Alignment=1
}
Add(InlineCode,14826946,154,112)
{
WorkPoints=#6:doWork|
EventPoints=#5:onRes|
VarPoints=#4:vStr|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses windows,kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|15: Str:string;|9: public|20: onRes:THI_Event;|54: procedure doWork(var _Data : TData; Index : Word);|52: procedure vStr(var _Data : TData; Index : Word);|5: end;|0:|14:implementation|29:procedure THiAsmClass.doWork;|17:var s,sss:string;|19: i, j : integer;|5:begin|18:// Получаем строку|29:str := Trim(toString(_Data));|66:// Проверяем на "пусто". Если нет, то переводим в нижний регистр. |50:If str='' then exit else str:= AnsiLowerCase(str);|8:sss:='';|36:// удаляем повторы и символы "Ъ Ы Ь"|104:for i:=1 to length(str) do if (pos(str[i],sss)=0) and not (str[i] in ['ъ'..'ь']) then sss:=sss+str[i]; |49:// простенькая сортировка, но вполне приемлемо. |5:j:=0;|14: While j=0 do|9: begin|11: j:=1;|35: for i:= 1 to length(sss)-1 do|94: if sss[i+1]<sss[i] then begin s:=sss[i]; sss[i]:= sss[i+1]; sss[i+1]:=s[1]; j:=0; end; |6: end;|23:_hi_onEvent(onRes,sss);|4:end;|0:|27:procedure THiAsmClass.vStr;|5:begin|21: dtString(_Data,str);|4:end;|0:|4:end.|
link(onRes,6505962:doText,[])
}

(прикинул, что на компонентах будет вагон и маленькая тележка )
И, насколько я помню, компонент ArraySort работает нормально с русскими буквами только с компилятором FPC, а вот с Delphi нет.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0