Доброго времени суток, уважаемые.
Ситуация.
Есть лист, содержит данные произвольного типа.
Type TObj
Field Name:String = ""
Field value1:int;
Field value2:Float;
End Type
Global Objs:TList = CreateList() ;
Local Obj:TObj = New TObj;
Obj.Name="First";
Obj.value1=1;
Obj.value2=2;
Objs.AddLast(Obj);
.............
Теперь нам надо найти элемент по имени.
1 Способ
Он же самый лёгкий. Первый способ это просто запустить цикл по листу и проверять NAME
Function FindListElement(Name:String)
Local LObj:TObj;
For LObj = EachIn Objs
If LObj.Name = Name Then
......
Exit;
EndIf;
Next;
End Function
2 Способ
Создать отдельный лист который будет содержать только строки, порядок элементов в листе строк, будет совпадать с порядком элементов в листе Objs. При добавлении данных в лист Objs , имя конкретного элемента будет добавляться в наш лист строк, при удалении удаляться. Таким образом мы сможем найти строку в "кэшированном" листе методом FindLast(), запомнить индекс элемента с таким именем, и по этому-же индексу получить элемент из первого листа Objs.
Что лучше?