2015-04-28 2 views
-1

Я использую simplelinkedlist. Здесь: (https://delphihaven.wordpress.com/2011/07/31/generic-linked-lists-redux/)LinkedList Читать один за другим

Я хочу прочитать весь список по одному. Но я не смог найти какой-либо вариант для этого.

Вот мои коды:

function TKduCache.addJPIPResponseData(jRes: TJPIPResponse): Boolean; 
var 
    data : TJPIPDataSegment; 
begin 
    data:= jRes.readLinkedList; 
    while (data <> nil) and (not data.isEOR) do 
    begin 
    addDataSegment(data); 
    data:= jRes.readLinkedList 
    end; 
    Result:= jRes.isResponseComplete; 
end; 

И readLinkedList метод:

function TJPIPResponse.removeJpipDataSegment: TJPIPDataSegment; 
begin 
    Result:= TJPIPDataSegment(jpipDataList.First.Value); 
end; 

SimpleLinkedList можно читать, как;

  • jpipDataList.First.Value
  • jpipDataList.First.Next.Value
  • jpipDataList.First.Next.Next.Value

. . .

Как я должен создать свой алгоритм для чтения так?

ответ

1

Связанный класс списка, на который вы ссылаетесь, имеет перечислитель. Таким образом, вы можете сделать это:

var 
    List: TSimpleLinkedList<Integer>; 
    Item: Integer; 
.... 
// create and populate List 
for Item in List do 
    DoSomething(Item); 

В качестве альтернативы, вы можете использовать классический while цикл для итерации по списку:

var 
    List: TSimpleLinkedList<Integer>; 
    Node: TSimpleLinkedList<Integer>.TNode; 
.... 
// create and populate List 
Node := List.First; 
while Assigned(Node) do 
begin 
    DoSomething(Node.Value); 
    Node := Node.Next; 
end; 
+0

отлично, спасибо. второй метод подходит для меня – Dauezevy

Смежные вопросы