Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > StringGrid


Автор: Guedda 1.6.2006, 11:57
Добрый день. Сейчас столкнулся со следующей задачей:
Имеется StringGrid с огромным множеством полей и записей. Записи все идентичные (допустим "A-B").
Какой в таких случаях наиболее быстрый алгоритм перебора всего StringGrid?

Заранее благодарен. 

Автор: skyboy 1.6.2006, 12:00
Guedda, немного не понятно. Приведи пример. Пока что видно только желание перебирать одинаковые записи и не ясно, зачем. 

Автор: Yanis 1.6.2006, 12:28
Действительно. Может прояснив задачу мы сможем решить твоую проблему наиболее оптимально. Что значит "записи все идентичные", т.е. "<символ>-<символ>" или они все одинаковые?

Добавлено @ 12:30 
Конечно могу предложить использовать альтернативный компонент. Думаю что-нибудь отсюда да подойдёт http://torry.net/pages.php?id=114 

Автор: Guedda 1.6.2006, 14:26
Цитата(skyboy @  1.6.2006,  13:00 Найти цитируемый пост)
Приведи пример

Вот пример:
Код

Январь | Февраль | Март | Апрель | Май | Июнь | Июль | Август | Сентябрь | Октябрь
AB-BA   | BA-BB      | BA-BA| BB-AB   |...
BA-BB   | BA-BA      | ... и так далее...

Так вот мне необходимо провести анализ всех ячеек (поиск определенной ячейки...). Как это быстрее реализовать? 

Автор: skyboy 1.6.2006, 15:12
Если ячеек так много, а возможных комбинаций - только 16, то какую "одну ячейку" ты ищешь? Или тебе надо найти для обработки, скажем, всё ячейки с "АВ-ВВ"? Тогда, коль ничего не известно о принципе формирования этих значений, какой может быть ещё подход кроме перебора? 

Автор: _hunter 1.6.2006, 16:06
можно пойти с другой стороны -- при заполнении сетики заполняй так же мапу/мультимапу (компонент/библиотеку придется поискать) тогда по значению "AB-BA" сразу же найдеш все ее координаты 

Автор: murod 1.6.2006, 16:43
наверно вот так будет по проше. 
Код

type // обявляеш класс для хранения индекса стринг грида.
Tgridcellindex=class
  RowInd,CellInd:integer;
end;

// findstr-строка которую надо найти. если найдет то возврашает координаты ячейки-tgridcellindex.

function FindGridData(stringgrid:tstringgrid;findstr:string):tgridcellindex;
var List:TStringList;gridInd:Tgridcellindex;
i,j,findIndex:integer;
begin
list:=TStringList.Create;
try
 for i:=0 to stringgrid.ColCount-1 do
  for j:=0 to stringgrid.RowCount-1 do
   begin
    gridind:=Tgridcellindex.create;
    gridind.RowInd:=j;
    gridind.CellInd:=i;
    list.AddObject(StringGrid1.Cells[i,j],gridInd);// добавляем в стрингЛист
   end;
 if list.Find(findstr,findIndex) then// если нашол то возврашает TRUE
   begin 
    result:=list.Objects[findIndex] as tgridcellindex ;
   end else result:=nil;// если нет то возврашаем nil
finally list.free; end;
end;


Вроде находит быстро. если надо несколько раз искать то list.sort; надо добавить , находит быстрее. 
   

Автор: Guedda 2.6.2006, 12:16
Цитата(murod @  1.6.2006,  17:43 Найти цитируемый пост)
наверно вот так будет по проше. 

Вот. Спасибо огромное.
+1
 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)