« VBScriptの配列は、漸増が遅い。 | トップページ | JScriptのArrayオブジェクトからの取り出し(pop/shift)は、ともに遅い。 »

2008年5月12日 (月)

JScriptのArrayオブジェクトへの追加では、unshift()が遅い。

JScriptのArrayオブジェクトに追加するとき、push()はそれほどでもないが、unshift()はとても遅い。

t1 = Timer
Set sc = CreateObject("ScriptControl")
sc.Language = "JScript"
Set a = sc.Eval("new Array()")
For k = 1 To 1024 * 512
  a.push k
Next
MsgBox Timer - t1
'9.523438

push()は、VBScriptやVBAの配列をReDimで漸増するより速いので、その代替に使えます。

t1 = Timer
Set sc = CreateObject("ScriptControl")
sc.Language = "JScript"
Set a = sc.Eval("new Array()")
For k = 1 To 1024 * 8
  a.unshift k
Next
MsgBox Timer - t1
'5.617188

unshift()は、怖ろしく遅いので使うべきでないかも。

push()は、o(n)だけど、unshift()は、o(n**2)みたい。

もし、必要なら、push()とreverse()で代替したほうがよいでしょう。

« VBScriptの配列は、漸増が遅い。 | トップページ | JScriptのArrayオブジェクトからの取り出し(pop/shift)は、ともに遅い。 »