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

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

Анализ массива элементов


Ш-К ©   (2007-03-06 09:21:00) 

Второй час бъюсь.

У меня есть набор данных:
RData = record
 Document: Int64;
 Condition: Int64;
end; {для документа выполняется кондиция}

В виде массива:
ArrData: array of RData;

Нужно найти Document все такие, что:
В ArrData для Document существовали все возможные Condition из ArrData.


Ш-К   (2007-03-07 09:28:00) [1]

Спасибо, конечно. Насилу осилил.


ЮЮ   (2007-03-06 10:58:00) [2]

Построить матрицу количества вхождений Condition для всех Document.
Например:

function IndexOf(var Arr: TInt64DynArray; Value:Int64): integer;
begin
 // ищет в массиве Arr значение Value. Если не находит, то вставляет
 // возвражвет индекс найденного элемнта в массиве
  // для самлстоятельного выполнения :)
end;

function SelectAllConditionsDocument(ArrData: TArrData): TInt64DynArray;
var
 i, iDoc, iCond, cnt: integer;
 documents, conditions: TInt64DynArray;
 docConds: array of array of integer;
begin
 Result := nil;
 documents := nil;
 conditions := nil;
 for i := 0 to High(ArrData) do begin
   iDoc := IndexOf(documents, ArrData[i].Document);
   iCond := IndexOf(conditions, ArrData[i].Condition);
   if iDoc > High(docConds) then
     SetLength(docConds, iDoc - 1);
   if iCond > High(docConds[iDoc]) then
     SetLength(docConds[iDoc], iCond - 1);
   Inc(docConds[iDoc, iCond]);
 end;

 for iDoc := 0 to High(documents) do begin
   if Length(docConds[iDoc]) < length(conditions) then continue;
   cnt := 0;
   for iCond := 0 to High(docConds[iDoc]) do begin
     if docConds[iDoc, iCond] <> 0 then
       inc(cnt)
     else
       break;
   end;
   if cnt < length(conditions) then continue;
   IndexOf(Result, documents[iDoc]);
 end;
end;


Сергей М.   (2007-03-06 09:58:00) [3]


> Ш-К   (06.03.07 09:54) [3]


Все равно не понятно ...

Иллюстрируй примером массива - что имеется на входе и что требуется получить  на выходе


Ш-К   (2007-03-06 09:54:00) [4]

clickmaker ©   (06.03.07 09:40) [1]

> и что? цикл, перебор, наверно

Хоть на словах опишите тогда, если так тривиально.

Сергей М. ©   (06.03.07 09:41) [2]
> > все возможные Condition
>
>
> Это как ?

Все те, что можно встретить в рекордах в ArrData.
Нужно:
Document, для которого хоть одна Condition не существует, не выводить.


Сергей М.   (2007-03-06 09:41:00) [5]


> все возможные Condition


Это как ?


clickmaker   (2007-03-06 09:40:00) [6]

и что? цикл, перебор, наверно


Наверх

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