Показать сообщение отдельно
  #3  
Старый 04.02.2022, 18:51
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,564
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию

Цитата:
Сообщение от lmikle
Ну так и делай...

Наваял пример, однако осталось не совсем понятно, как получить число дочерних элементов например товара 1, и как их перебрать в цикле.

Код:
var
  key: string;

  MyFiles: TDictionary<String,TDictionary<Integer,TA>>;
  fl: TDictionary<Integer,TA>;
begin
  MyFiles := TDictionary<String,TDictionary<Integer,TA>>.Create;

  fl := TDictionary<Integer,TA>.Create;
  fl.Add(0, ['120','20']);
  fl.Add(1, ['10','20']);
  fl.Add(2, ['10','20']);

  MyFiles.Add('Товар 1', fl);

  fl.Free;

  fl := TDictionary<Integer,TA>.Create;
  fl.Add(0, ['15','25']);
  fl.Add(1, ['15','25']);

  MyFiles.Add('Товар 2', fl);

  fl.Free;

  {fl := TDictionary<Integer,TA>.Create;
  fl.Add(3, ['20','30']);

  MyFiles.Add('Товар 1', fl);

  fl.Free;}

  Memo1.Lines.Clear;
  Memo1.Lines.Add('Items count: ' + IntToStr(MyFiles.Count));

  if MyFiles.ContainsKey('Товар 1') then
  begin
    Memo1.Lines.Add('Objecs count: ' + IntToStr(MyFiles['Товар 1'].Count));
    // Memo1.Lines.Add('Objecs count: ' + IntToStr(MyFiles.Items['Товар 1'].Keys.Count));

    fl := TDictionary<Integer,TA>.Create;
    fl := MyFiles['Товар 1'];

    Memo1.Lines.Add('"Товар 1" оjecs count: ' + IntToStr(fl.Count));

    fl.Free;

    Memo1.Lines.Add('');

    for key in MyFiles.Keys do
      Memo1.Lines.Add(key + ': ' + IntToStr(MyFiles[key].Count));
  end;

  MyFiles.Free;
end;

Используя Count также получаю что-то несуразное для дочерних элементов первого товара.

Цитата:
Items count: 2
Objecs count: 16
"Товар 1" оjecs count: 0

Товар 1: 0
Товар 2: 0

Да и закоментированный "fl.Add(3, ['20','30']);" - у меня есть рекурсия - сканирование папок, в них файлы, так вот все дочерние элементы добавляются не за один раз, а при каждом проходе. Пока до этого не дошел даже.

PHP код:
if(mb_strpos($dir."/".$v'/Фото/'))
    
$files['/'.$shk][] = array($dir."/".$v'[Фото]'$shk$category);
else
    if(
mb_strpos($dir."/".$v'/Инфографика/'))
        
$files['/'.$shk][] = array($dir."/".$v'[Инфографика]'$shk$category);
    else 
Ответить с цитированием