« グラフ/dojo.widget.Chart | トップページ | ドローイングAPI »

2007年4月10日 (火)

Collection

dojoでは、以下のCollectionオブジェクトが提供されている。GraphとSkipListはソースは存在しているが利用できなくなっている(dojo.experimentalにより無効化されている)。

ArrayList

一般にArrayListはサイズ変更可能な配列である。元々JavaScriptの配列はサイズ変更可能であるため、配列の途中に新たな要素を容易に追加したり、削除できる点などがDojoのArrayListの特徴である。

ArrayListの内部では配列として値を保持しており、ArrayListのためのメソッドを追加している。配列のメソッドを利用することはできない。

ArrayListを利用するときは、dojo.collections.ArrayListをrequireする。

dojo.require("dojo.collections.ArrayList");

コンストラクタは、dojo.collections.ArrayListを用いる。

var al = new dojo.collections.ArrayList(["foo","bar","test","bull"]);
メソッド名概要
add(obj) pushと同じ
addRange(array) pushと同じ
clear() splice(0, ary.length)と同じ
clone() ArrayListのクローンを作成する
contains(obj) objがArrayListに含まれるか
count lengthと同じ
forEach(function, scope) ArrayListの各要素にfunctionを適用する
getIterator() dojo.collections.Iteratorを返す
indexOf(obj) objの順番を返す。ないときは-1を返す
insert(index, obj) index番目にobjを挿入する
item(index) index番目の要素を返す
remove(obj) ArrayListからobjを削除する
removeAt(index) index番目の要素を削除する
reverse() reverse()と同じ
setByIndex(index, obj) index番目の要素をobjに置き換える
sort() sort()と同じ
toArray() 配列に変換して返す
toString('str') join('str')と同じ

2分木/BinaryTree

2分木は要素を検索しながら、要素の挿入/削除も行うときに効果がある。 同じ要素を複数挿入することはできない。 また、数値と文字列を混在させることもできない。 2分木/BinaryTreeを利用するときは、dojo.collections.BinaryTreeをrequireする。

dojo.require("dojo.collections.BinaryTree");

以下に利用例を示す。

var tree = new dojo.collections.BinaryTree(2);
tree.add(3);
tree.add(23);
tree.add(12);
tree.add(1);
tree.toString();
--> '1 2 3 12 23'
メソッド名概要
add(obj) 要素を追加する
clear() 全ての要素を削除する
clone() BinaryTreeのクローンを作成する
contains(obj) 要素が含まれるかどうかを返す
count 要素の数を返す
deleteData(obj) 指定した要素を削除する
getIterator() dojo.collections.Iteratorを返す
search(data) 2分木を探索してnodeオブジェクト(プロパティとしてvalue, left, rightを持つ)を返す
toString(order, sep) 探索方法と区切り文字を指定して、各要素を繋げた文字列を返す。引数は省略できる。orderには、dojo.collections.BinaryTree.TraversalMethods.Preorder/Inorder/Postorder (または1/2/3)のいずれかを指定できる

Dictionary/連想配列

Dictionary/連想配列は、文字列(key)を添え字とした配列である。JavaScript自体でも連想配列が提供されているが、Dictionaryではいくつか便利なメソッドを提供している。Dictionaryを利用するときは、dojo.collections.Dictionaryをrequireする。

dojo.require("dojo.collections.Dictionary");

以下に利用例を示す。

var dic = new dojo.collections.Dictionary();
dic.add("foo","bar");
dic.add("baz","fab");
dic.add("buck","shot");
dic.add("apple","orange");
dic.item("foo");

以下にDictionaryのメソッド一覧を示す。keyは文字列のみを指定できる。

メソッド名概要
add(key, obj) 新しい要素を追加
clear() 全ての要素を削除する
clone() Dictionaryのクローンを作成する
count 要素の数を返す
contains(key) 指定したkeyが含まれるかどうか
containsKey(key) contains(key)と同じ
containsValue(obj) 指定した要素が含まれるかどうか
entry(key) keyに対応する要素をdojo.collections.DictionaryEntryとして返す
forEach(function, scope) Dictionaryの各要素にfunctionを適用する
getIterator() dojo.collections.DictionaryIteratorを返す
getKeyList() 登録されている全てのkeyの配列を返す
getValueList() 登録されている全ての要素の配列を返す
item(key) keyに対応する要素を返す。entry(key).valueOf()と同じ
remove(key) keyと対応する要素を削除する

 

DictionaryEntryは、toString()とvalueOf()のメソッドを持つ。 DictionaryIteratorは、以下のメソッドを持つ。

atEnd() カーソルが最後に達したかどうかを判定する
get() 要素を取り出し、カーソルを1つ進める
map(function, scope) 各要素にfunctionを適用する
reset() カーソルをリセットする

SortedList

内部的にkeyでソートされた連想配列を作る。SortedListはDictionaryのメソッドを全て持ち、さらにindexを引数として取るメソッドが追加されている。 登録しながら、ソートされた一覧が欲しいときには便利だが、登録処理は遅くなる。 登録後に置き換えると、indexで取得する要素とkeyで取得する要素が合わなくなるときがある。 SortedListを利用するときは、dojo.collections.SortedListをrequireする。

dojo.require("dojo.collections.SortedList");

以下に利用例を示す。

var sl = new dojo.collections.SortedList();
sl.add("foo","bar");
sl.add("baz","fab");
sl.add("buck","shot");
sl.add("apple","orange");
for(i=0; i

Dictionaryに対して追加されているメソッドのみを以下に示す。

メソッド名概要
copyTo(arry, i) 引数の配列(array)のi番目にSortedListの内容を配列に変換して挿入する
getByIndex(i) i番目の要素を取得する
getKey(i) i番目のkeyを取得する
indexOfKey(key) 指定したkeyのindexを取得する
indexOfValue(obj):指定したobjのindexを取得する
removeAt(i) i番目の要素/keyを削除する
replace(key, obj) 指定したkeyに対応する要素を置き換える
setByIndex(i, obj) i番目の要素をobjに置き換える

Queue

QueueはFirst In First Outのデータ構造である。Queueを利用するときは、dojo.collections.Queueをrequireする。

dojo.require("dojo.collections.Queue");

以下に利用例を示す。

var queue = new dojo.collections.Queue(["foo","bar","test","bull"]);
queue.enqueue("new");
queue.peek();
queue.dequeue();
queue.toArray();
--> ["bar", "test", "bull", "new"]
メソッド名概要
clear() queueを空にする
clone() Queueのクローンを作成する
contains(obj) 指定した要素が含まれるかどうか
copyTo(array, i) 引数の配列(array)のi番目にqueueの内容を配列に変換して挿入する
count 要素数を返す
dequeue() queueの先頭から要素を取得して、queueから削除する
enqueue(obj) queueに要素を追加する
forEach(function, scope) queueの各要素にfunctionを適用する
getIterator() dojo.collections.Iteratorを返す
peek() queueの先頭の要素を取得する。queueからは削除しない
toArray() 配列に変換して返す

Stack

StackはFirst In Last Outのデータ構造である。Stackを利用するときは、dojo.collections.Stackをrequireする。

dojo.require("dojo.collections.Stack");

以下に利用例を示す。

var stack = new dojo.collections.Stack(["foo","bar","test","bull"]);
stack.push("new");
stack.pop();

StackのメソッドはQueueとほぼ同じメソッドが提供されている。Queueのdequeue(), enqueue(obj)が、Stackでは、pop()とpush(obj)の2つのメソッドに置き換わっている。

Store

Storeは連想配列としても配列としても利用できるデータ構造となっている。オブジェクトを削除すると、配列の添え字の番号が自動的に詰められる。 Storeを利用するときは、dojo.collections.ArrayListをrequireする。

dojo.require("dojo.collections.Store");

以下に例を示す。

var data=[
  {Id:"key1", val1:"testval", simpleNum:1.2, getName:function(){return "Bob Smith";}},
  {Id:"key2", val1:null, simpleNum:56, getName:function(){return "Jane";}},
  {Id:"key3", val1:"value", simpleNum:1, getName:function(){return "Bam bam";}, nested:{name:"value"}}
];
var store=new dojo.collections.Store(data);

Storeのメソッド一覧を示す

メソッド名概要
addData(obj, key) オブジェクトを追加する。keyが指定されないときは、オブジェクトのIdフィールドがkeyとして使われる
addDataRange(array) オブジェクト配列を追加する
clearData() Storeをクリアする
forEach(function) 登録されている全ての内部オブジェクトにfunctionを適用する
forEachData(function) 登録されている全てのオブジェクトにfunctionを適用する
get() 内部オブジェクト(keyとsrcフィールドを持つ)の配列を返す
getByIndex(index) 指定したindexの内部オブジェクトを返す
getByKey(key) 指定したkeyに対応する内部オブジェクトを返す。登録したオブジェクトを返すときはgetDataByKey(key)を用いる
getData() オブジェクトの配列を返す
getDataByIndex(index) 指定したindexのオブジェクトを返す
getDataByKey(key) keyに対応するオブジェクトを返す
removeData(obj) 指定したオブジェクトを削除する
removeDataByIndex(index) 指定したindexのkeyとオブジェクトを削除する
removeDataByKey(key) keyと対応するオブジェクトを削除する
setData(array) Storeをクリアした後、指定したオブジェクト配列を登録する
update(obj, fieldPath, val) 指定したオブジェクトのフィールド(fieldPath)の値をvalに変更する。fieldPathは文字列として[.]で区切って指定することができる

« グラフ/dojo.widget.Chart | トップページ | ドローイングAPI »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/232684/6039319

この記事へのトラックバック一覧です: Collection:

« グラフ/dojo.widget.Chart | トップページ | ドローイングAPI »