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