Size: a a a

2020 May 02

GB

George Bakhtadze in Delphi & Lazarus
Рус
jarr1 тоже грохнется
с чего это он грохнется? если это происходит, значит что-то не так. или может значения, добавленные из него грохаются?
источник

Р

Рус in Delphi & Lazarus
George Bakhtadze
с чего это он грохнется? если это происходит, значит что-то не так. или может значения, добавленные из него грохаются?
procedure TForm1.FormCreate(Sender: TObject);
var
 jarr1, jarr2: TJSONArray;
 i: Integer;
begin
 jarr1 := TJSONObject.ParseJSONValue('[[1,1],[2,2],[3,3]]') as TJSONArray;
 jarr2 := TJSONObject.ParseJSONValue('[[4,4],[5,5],[6,6]]') as TJSONArray;
 for i := 0 to jarr2.Count - 1 do
   jarr1.AddElement(jarr2.Items[i]);
 jarr2.Free;
 Memo1.Lines.Add(jarr1.ToString);
end;
источник

АВ

Александр В... in Delphi & Lazarus
А если пошагово выполнить с отладчиком?
источник

GB

George Bakhtadze in Delphi & Lazarus
а если вместо
jarr1.AddElement(jarr2.Items[i]);
написать
jarr1.AddElement(jarr2.Items[i].Clone());
источник

Р

Рус in Delphi & Lazarus
Александр В
А если пошагово выполнить с отладчиком?
На "Memo1.Lines.Add(jarr1.ToString);" вылет
источник

Р

Рус in Delphi & Lazarus
George Bakhtadze
а если вместо
jarr1.AddElement(jarr2.Items[i]);
написать
jarr1.AddElement(jarr2.Items[i].Clone());
вот так работает:
jarr1.AddElement(jarr2.Items[i].Clone as TJSONValue);
источник

АВ

Александр В... in Delphi & Lazarus
Предположу, что ты освобождаешь эеленты, которые добавил
источник

Р

Рус in Delphi & Lazarus
Александр В
Предположу, что ты освобождаешь эеленты, которые добавил
Да я бы не хотел этого))
источник

АВ

Александр В... in Delphi & Lazarus
Ну когда ты из одного списка элементы добавляешь в другой, при этом освобождая первый - так оно и происходит:D
источник

АВ

Александр В... in Delphi & Lazarus
А вот когда туда копируешь, они там и остаются
источник

Р

Рус in Delphi & Lazarus
Александр В
А вот когда туда копируешь, они там и остаются
Поэтому только два варианта:
1) jarr2 := TJSONArray.Create;
   jarr2.Free;
2) Clone
   Free
источник

И

Илья in Delphi & Lazarus
Там хрень какая то. Очень похоже, что он элементам меняет родителя, но при этом Count  источника остается равным 3, т.е. они добавились во второй массив, но память в первом не освободили. Потом при разрушении второго массива он удаляет новые элементы, а первый массив еще помнит, что у него 3 элемента. Скорее всего клонирование для того и создано.
источник

RS

Renat Suleymanov in Delphi & Lazarus
Рус
procedure TForm1.FormCreate(Sender: TObject);
var
 jarr1, jarr2: TJSONArray;
 i: Integer;
begin
 jarr1 := TJSONObject.ParseJSONValue('[[1,1],[2,2],[3,3]]') as TJSONArray;
 jarr2 := TJSONObject.ParseJSONValue('[[4,4],[5,5],[6,6]]') as TJSONArray;
 for i := 0 to jarr2.Count - 1 do
   jarr1.AddElement(jarr2.Items[i]);
 jarr2.Free;
 Memo1.Lines.Add(jarr1.ToString);
end;
Добавляй не просто так, а с использованием .Clone каждого элемента. Тогда в конце смело можешь очистить jarr2
источник

RS

Renat Suleymanov in Delphi & Lazarus
Рус
вот так работает:
jarr1.AddElement(jarr2.Items[i].Clone as TJSONValue);
+
источник

AK

Alexey Kulakov in Delphi & Lazarus
источник

TC

Tom Cauf in Delphi & Lazarus
Во, только на днях интересовался! Спасибо!
источник
2020 May 03

VI

Vitalii Ishkevych in Delphi & Lazarus
Как проверить множество на пустоту?
источник

VA

Viktor Akselrod in Delphi & Lazarus
Vitalii Ishkevych
Как проверить множество на пустоту?
сравнить с пустотой
Some = []
источник

VI

Vitalii Ishkevych in Delphi & Lazarus
Viktor Akselrod
сравнить с пустотой
Some = []
Чёт не работает
источник

VA

Viktor Akselrod in Delphi & Lazarus
Vitalii Ishkevych
Чёт не работает
очевидно,  что-то не так делаешь
источник