vbsの配列を少しだけ使いやすくするために配列Classを作ってみた。
rubyやperlを使った後にvbsを使うと面倒で仕方がない。
せめて配列ぐらいは、LLっぽくできないものかと思い少し試してみた。気のせいかもしれないがもしかしたらvbsもやればできる子かもしれないと思った。
できたClass。配列のように扱うけど中身はHash(Dictionary)。
Option Explicit Class CustomArray Public x, items Sub Class_Initialize() Set items = CreateObject("Scripting.Dictionary") x = 0 End Sub Sub Class_Terminate() items.removeall End Sub Public Function push(ByVal item) items.item(x) = item x = x + 1 End Function Public Function pop() Dim temp temp = items(x) items.Remove (x) x = x - 1 pop = temp End Function Public Function size() size = items.Count End Function Public Default Property Get item(byval idx) item = items(idx) End Property Public Property Let item(ByVal idx, ByVal value) dim i if isNumeric(idx) Then if x >= idx then items.item(idx) = value else Do While idx > x x = x + 1 items.item(x) = "" Loop items.item(idx) = value end if End if End Property Public Property Set item(ByVal idx, ByVal value) items.item(idx) = value End Property Public Function sort() Dim i, j, temp For Each i In items For Each j In items If (items.item(i) <= items.item(j)) Then temp = items.item(i) items.item(i) = items.item(j) items.item(j) = temp End If Next Next End Function Public Function reverse() Dim i, j, temp For Each i In items For Each j In items If (items.item(j) <= items.item(i)) Then temp = items.item(j) items.item(j) = items.item(i) items.item(i) = temp End If Next Next End Function Public Function uniq() Dim i, j, temp, empflg empflg = 0 : j = 0 Set temp = CreateObject("Scripting.Dictionary") For Each i In items.keys if items(i) = "" then empflg = 1 else temp.item(items(i)) = i end if Next items.removeall if empflg = 0 then j = 0 else j = 1 items.item(0) = "" end if For Each i In temp.keys items.item(j) = i j = j + 1 Next set temp = Nothing End Function End Class
javascriptやrubyぽく、pushやpopで入れたり出したり。
Dim arr, x set arr = new CustomArray arr.push("aaa") arr.push("bbb") arr.push("aaa") arr(1) = "xxx" arr(3) = "yyy" arr(5) = "yyy" arr(7) = "aaa" For x = 0 To arr.size -1 WScript.echo x & " " & arr(x) Next '#=>0 aaa '#=>1 xxx '#=>2 aaa '#=>3 yyy '#=>4 '#=>5 yyy '#=>6 '#=>7 aaa WScript.echo arr.pop '#=>aaa
sortはrubyでいう破壊的メソッド。
Dim arr, x set arr = new CustomArray arr.push("aaa") arr.push("ccc") arr.push("bbb") arr.push("aaa") arr.sort For x = 0 To arr.size -1 WScript.echo x & " " & arr(x) Next '#=>0 aaa '#=>1 aaa '#=>2 bbb '#=>3 ccc
uniqもrubyでいう破壊的メソッド。Hash(Dictionary)は便利ですね。
Dim arr, x set arr = new CustomArray arr.push("aaa") arr.push("ccc") arr.push("bbb") arr.push("aaa") arr.uniq For x = 0 To arr.size -1 WScript.echo x & " " & arr(x) Next '#=>0 aaa '#=>1 ccc '#=>2 bbb