Показать сообщение отдельно
Старый 28.09.2011, 10:04   #1
Greymem
Нуждающийся
 
Регистрация: 31.05.2010
Сообщений: 63
Написано 3 полезных сообщений
(для 3 пользователей)
Вопрос [Вопрос] Оптимизация поиска в листе

Доброго времени суток, уважаемые.

Ситуация.

Есть лист, содержит данные произвольного типа.
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.

Что лучше?
(Offline)
 
Ответить с цитированием