勉強会で出てきたmx.collections.IViewCursorについて調べてみました。
このインターフェースは、ArrayCollectionやXMLListCollectionが実装しています。
パッケージ名からも分かるように、コレクション用のインターフェースで
- 双方向逐次アクセス
- コレクションへの追加・削除
- 検索
の機能を提供するメソッドが定義されています。
双方向逐次アクセス機能と追加削除の機能は、JavaのListIteratorとほぼ同機能です。JavaとAS3では次のような感じになります。
LinkedList list = new LinkedList(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); ListIterator cursor = list.listIterator(); cursor.next(); cursor.next(); cursor.remove(); cursor.add("z"); cursor.previous(); cursor.previous(); while(cursor.hasNext()){ Object o = cursor.next(); System.out.println(o); } while(cursor.hasPrevious()){ Object o = cursor.previous(); System.out.println(o); }
- AS3
var list:ArrayCollection = new ArrayCollection(); list.addItem("a"); list.addItem("b"); list.addItem("c"); list.addItem("d"); var cursor:IViewCursor = list.createCursor(); cursor.moveNext(); cursor.remove(); cursor.insert("z"); cursor.movePrevious(); cursor.movePrevious(); while (!cursor.afterLast){ var o:Object = cursor.current; trace(o); cursor.moveNext(); } cursor.movePrevious(); while (!cursor.beforeFirst){ o = cursor.current; trace(o); cursor.movePrevious(); }
上記サンプルはいずれも「azcddcza」を出力します。
Javaの方はnext()を呼ぶまで初めの要素にカーソルが当っていないのに対し、AS3ではcreateCursorを呼んだ時点で初めの要素にカーソルが当たっている為、アクセスが若干異なる点は注意すべき点です。
検索機能についてはJavaと異なるようです。続きは次回。