2017年11月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
無料ブログはココログ

« 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)は、ともに遅い。 »