Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.01;
Скачать: CL | DM;

Вниз

Анализ массива элементов   Найти похожие ветки 

 
Ш-К   (2007-03-06 09:21) [0]

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

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

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

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


 
clickmaker ©   (2007-03-06 09:40) [1]

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


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


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


Это как ?


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

clickmaker ©   (06.03.07 09:40) [1]

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

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

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

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


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


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


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

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


 
ЮЮ ©   (2007-03-06 10:58) [5]

Построить матрицу количества вхождений 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-07 09:28) [6]

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



Страницы: 1 вся ветка

Текущий архив: 2007.04.01;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.078 c
15-1173109716
muhh
2007-03-05 18:48
2007.04.01
Работа с реестром


2-1173764018
ryslan56
2007-03-13 08:33
2007.04.01
Сворачивание формы


2-1173426039
wwwrr
2007-03-09 10:40
2007.04.01
constructor


15-1173178928
dolmat
2007-03-06 14:02
2007.04.01
Фильм нужен


6-1161065329
Lilu
2006-10-17 10:08
2007.04.01
Indy10 + Thread