Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.116.13.113] |
|
Сообщ.
#1
,
|
|
|
Необходимо перевести код работы с массивом из PHP на Delphi
$files['qaz1.txt'][] = array('20kb,' 'readonly'); $files['qaz1.txt'][] = array('30kb,' 'archive'); $files['qaz1.txt'][] = array('40kb,' 'readonly'); Т.е. на PHP мы можем очень просто получить значение 30кб: $d = $files['qaz1.txt'][1][0]; А как сделать подобное на Delphi? Цитата Мне вот как так нужно [товар1][0] = array('10', '20') [товар1][1] = array('15', '30') [товар1][2] = array('12', '10') [товар2][0] = array('11', '20') [товар2][1] = array('25', '30') [товар2][2] = array('32', '10') ну в крайнем случае так, но это избыточно [0][0] = array('name1', '') [0][1] = array('10', '20') [0][2] = array('15', '30') [0][3] = array('12', '10') [1][0] = array('name2', '') [1][1] = array('10', '20') [1][2] = array('15', '30') [1][3] = array('12', '10') Пробовал TDictionary, но возникли трудности: не совсем понятно, как получить число дочерних элементов например товара 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']);" - у меня есть рекурсия - сканирование папок, в них файлы, так вот все дочерние элементы добавляются не за один раз, а при каждом проходе. Пока до этого не дошел даже. 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 |