Monkey/語言/列表
外觀
在 Monkey 中,列表是一組封裝在一個物件中的物件,並按順序讀取。列表可以向前、向後讀取,逐個物件遍歷,排序,並提供節點級訪問以進行插入和查詢。
示例
Class Obj
Field x:Int, y:Int, z:Int
Method New(xx:Int,yy:Int,zz:Int)
x=xx; y=yy; z=zz
End
End
Function Main()
mylist = New List<Obj>
mylist.AddLast(New Obj(1,1,1))
mylist.AddLast(New Obj(2,2,2))
mylist.AddFirst(New Obj(3,3,3))
Print "list:"
For Local o:Obj = Eachin mylist
Print o.x+" "+o.y+" "+o.z
Next
End
列表與其他物件一樣,使用 'NEW' 關鍵字建立。它與其他物件的不同之處在於它需要一個型別說明符。型別說明符(或型別引數)使用大於和小於符號定義:< 和 >。在上面的示例中,列表 'mylist' 是 'Obj' 的列表,它是一個包含三個欄位的類:x、y 和 z。
'EachIn' 將自動遍歷列表,將物件分配給迭代變數。當遇到 NULL 時,EachIn 將退出迴圈,表示列表的結尾。
列表節點語法
Local mynode:list.Node<Obj>
mynode = mylist.FirstNode()
當物件新增到列表時,也會建立節點
Local mynode:list.Node<Obj> = mylist.AddLast(New Obj(4,4,4))
節點可以從列表中返回一個值
Local o:Obj = mynode.Value()
Print o.x+" "+o.y+" "+o.z
節點可以用來反向遍歷列表
Local mynode:list.Node<Obj> = mylist.LastNode()
While mynode
Local o:Obj
o = mynode.Value()
Print o.x+" "+o.y+" "+o.z
mynode = mynode.PrevNode()
Wend
節點可以使用節點建構函式(New 命令)將值插入列表中
Local mynode:list.Node<Obj> = mylist.FirstNode()
Local insertdata:Obj = New Obj(9,9,9)
While mynode
If mynode.Value.x = 2
''insert after
New list.Node<Obj>( mynode.NextNode(), mynode, insertdata)
Endif
mynode = mynode.NextNode()
Wend
節點可以從列表中刪除一個值,但請確保在刪除節點之前已完成該節點的操作
Local mynode:list.Node<Obj> = mylist.FirstNode()
Local removenode:list.Node<Obj>
While mynode
If mynode.Value.x = 2
''remove
removenode = mynode
Endif
mynode = mynode.NextNode()
removenode.Remove()
Wend