VBScript의 기존 배열에 항목을 어떻게 추가합니까?VBScript의 배열에 항목 추가
Javascript의 push 함수에 해당하는 VBScript가 있습니까?
즉
myArray의 세 가지 항목에 "애플", "오렌지"및 "바나나"를 가지며, I는 배열의 마지막에 "박"를 추가 할.
VBScript의 기존 배열에 항목을 어떻게 추가합니까?VBScript의 배열에 항목 추가
Javascript의 push 함수에 해당하는 VBScript가 있습니까?
즉
myArray의 세 가지 항목에 "애플", "오렌지"및 "바나나"를 가지며, I는 배열의 마지막에 "박"를 추가 할.
배열은 VBScript에서 매우 동적이지 않습니다. 이 추가 항목을 수용 할 수 있도록 기존의 배열을 성장하는 ReDim Preserve 문을 사용해야합니다 :
ReDim Preserve yourArray(UBound(yourArray) + 1)
yourArray(UBound(yourArray)) = "Watermelons"
사용자 지정 COM 또는 ActiveX 객체
동일하고, 배열 목록 내가 사용하는 경향이 빠른 690000. 위입니다 정렬 및 배열 변환 때문에 푸시하기위한 ArrayList
user326639 제공되는 FastArray는 훨씬 빠릅니다.
사전은 값을 검색하고 색인 (예 : 필드 이름)을 반환하거나 그룹화 및 집계 (히스토그램, 그룹 및 추가, 문자열 그룹화 및 연결, 그룹 및 푸시 하위 배열)에 유용합니다. 키를 그룹화 할 때 case in/sensitivity에 대해 CompareMode를 설정하고 "add"하기 전에 "exists"속성을 확인하십시오.
Redim은 한 배열에 많은 시간을 절약하지 않지만 배열 사전에 유용합니다. 위에서 FastArray에
'pushtest.vbs
imax = 10000
value = "Testvalue"
s = imax & " of """ & value & """"
t0 = timer 'ArrayList Method
Set o = CreateObject("System.Collections.ArrayList")
For i = 0 To imax
o.Add value
Next
s = s & "[AList " & FormatNumber(timer - t0, 3, -1) & "]"
Set o = Nothing
t0 = timer 'ReDim Preserve Method
a = array()
For i = 0 To imax
ReDim Preserve a(UBound(a) + 1)
a(UBound(a)) = value
Next
s = s & "[ReDim " & FormatNumber(timer - t0, 3, -1) & "]"
Set a = Nothing
t0 = timer 'Dictionary Method
Set o = CreateObject("Scripting.Dictionary")
For i = 0 To imax
o.Add i, value
Next
s = s & "[Dictionary " & FormatNumber(timer - t0, 3, -1) & "]"
Set o = Nothing
t0 = timer 'Standard array
Redim a(imax)
For i = 0 To imax
a(i) = value
Next
s = s & "[Array " & FormatNumber(timer - t0, 3, -1) & "]" & vbCRLF
Set a = Nothing
t0 = timer 'Fast array
a = array()
For i = 0 To imax
ub = UBound(a)
If i>ub Then ReDim Preserve a(Int((ub+10)*1.1))
a(i) = value
Next
ReDim Preserve a(i-1)
s = s & "[FastArr " & FormatNumber(timer - t0, 3, -1) & "]"
Set a = Nothing
MsgBox s
' 10000 of "Testvalue" [ArrayList 0.156][Redim 0.016][Dictionary 0.031][Array 0.016][FastArr 0.016]
' 54000 of "Testvalue" [ArrayList 0.734][Redim 0.672][Dictionary 0.203][Array 0.063][FastArr 0.109]
' 240000 of "Testvalue" [ArrayList 3.172][Redim 5.891][Dictionary 1.453][Array 0.203][FastArr 0.484]
' 690000 of "Testvalue" [ArrayList 9.078][Redim 44.785][Dictionary 8.750][Array 0.609][FastArr 1.406]
'1000000 of "Testvalue" [ArrayList 13.191][Redim 92.863][Dictionary 18.047][Array 0.859][FastArr 2.031]
이 코드를 추가 할 것을 권장합니다. t0 = timer '패스트 배열 a = array() i = 0 인 경우 ub = UBound (a) i> ub이면 ReDim Preserve a (Int ((Timer-t0, 3, -1) & "]) a (i) = value ReDim Preserve a (i-1) s ="& "[FastArr"& FormatNumber " = Nothing을 설정하십시오 – mgr326639
고마워요! 나는 결코 그 것을 생각할 수 없었을 것입니다. – Will
@ mgr326639 'ReDim Preserve a (i-1)'의 마지막은 무엇입니까? – sirdank
약간의 변화 :의 매 사이클마다 UBound(a)
을 확인 아무 소용이 없습니다
'pushtest.vbs
imax = 10000000
value = "Testvalue"
s = imax & " of """ & value & """"
t0 = timer 'Fast array
a = array()
ub = UBound(a)
For i = 0 To imax
If i>ub Then
ReDim Preserve a(Int((ub+10)*1.1))
ub = UBound(a)
End If
a(i) = value
Next
ReDim Preserve a(i-1)
s = s & "[FastArr " & FormatNumber(timer - t0, 3, -1) & "]"
MsgBox s
우리가 변경 정확히 알고있는 경우에. 그것은 단지 시작에 대한 후 매 시간이 ReDim
이 이전 방법은 10 개 수백만의 아이 맥스 (IMAX)에 대한 7.52 초 걸렸 내 컴퓨터에서
을 호출되는 전에 UBound(a)
을 수행 확인하도록
나는 그것을 변경했습니다.
새 메서드는 5를 사용했습니다.10 초당 성능 향상을 의미하는 10 초당 29 초 (1 천만 번의 시도에서 분명히이 비율은 시도 횟수와 직접적인 관계가 있음)
또한
dim arrr
arr= array ("Apples", "Oranges", "Bananas")
dim temp_var
temp_var = join (arr , "||") ' some character which will not occur is regular strings
if len(temp_var) > 0 then
temp_var = temp_var&"||Watermelons"
end if
arr = split(temp_var , "||") ' here you got new elemet in array '
for each x in arr
response.write(x & "<br />")
next'
검토 다소 까다 롭습니다 이것은 일을 할 수 있는지 말해 또는 처음에 당신이 배열
되지 않음 대답 또는 왜 'tricky에 대한 문자열을 나중에 분할의 모든 데이터를 저장 ' 나쁜 : 당신의 복사 및 붙여 넣기를 들어
>> a = Array(1)
>> a = Split(Join(a, "||") & "||2", "||")
>> WScript.Echo a(0) + a(1)
>>
12
는
' add item to array
Function AddItem(arr, val)
ReDim Preserve arr(UBound(arr) + 1)
arr(UBound(arr)) = val
AddItem = arr
End Function
이 도움을 그렇게
a = Array()
a = AddItem(a, 5)
a = AddItem(a, "foo")
감사처럼 사용 용이성! – Choy
'Redim Preserve'는 사용할 때마다 전체 배열을 복사한다는 것에주의하십시오. 즉, big-O 표기법에서 n ** 2 복잡도를가집니다. – mgr326639
@user, 전체 배열을 복사하는 것은 2 차가 아닌 ('O (n²)') 선형 복잡성 ('O (n)')을 가지고 있습니다. –