Форум: "Начинающим";
Текущий архив: 2007.04.01;
Скачать: [xml.tar.bz2];
ВнизАнализ массива элементов Найти похожие ветки
← →
Ш-К (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.038 c