JScriptのArrayオブジェクトからの取り出し(pop/shift)の代替
取り出し(pop/shift)は遅いので、For Eachで列挙するのが速くてよいでしょう。
Set sc=CreateObject("ScriptControl")
sc.Language="JScript"
set a=sc.Eval("new Array()")
t1=Timer
For k=1 To 1024*512
a.push k
Next
MsgBox Timer-t1
'10.35156
t1=Timer
For Each x In a
Next
MsgBox Timer-t1
'0.3046875
もし、インデクスで取り出したければ、For Eachで配列に転写するか、Evalを使うとよいでしょう。
t1=Timer
redim b(a.length-1)
k=-1
For Each x In a
k=k+1
b(k)=x
Next
MsgBox Timer-t1
'1.210938
t1=Timer
For k=1 To a.Length
x=Eval("a.[" & k-1 & "]")
Next
MsgBox Timer-t1
'13.78906
VBAの場合は、CallByName()も使えます。
t1 = Timer
For k = 1 To CallByName(a, "length", VbGet)
x = CallByName(a, k - 1, VbGet)
Next
Debug.Print Timer - t1
'1.8125
« JScriptのArrayオブジェクトからの取り出し(pop/shift)は、ともに遅い。 | トップページ | VBScriptやVBAからJScriptのArrayオブジェクトのインデックスアクセス »