2013-07-19 27 views
5

Biorąc pod uwagę następujące array jako przykład ...usunąć element z tablicy w klasycznym ASP

arr(0)(0) = 3 
arr(0)(1) = name 
arr(0)(2) = address 
arr(1)(0) = 7 
arr(1)(1) = name 
arr(1)(2) = address 
arr(2)(0) = 14 
arr(2)(1) = name 
arr(2)(2) = address 

muszę usunąć element środkowy (id = 7) od tablicy. Rozumiem, że muszę przechodzić przez tablicę i przenosić każdy rekord, który nie jest przeznaczony do usunięcia, do nowej tablicy. Próbowałem tak ...

Dim newArr,i 
Redim newArr(Ubound(arr)) 

For i = 0 to Ubound(arr) 
    If (CStr(arr(i)(0)) <> 7) Then 
     newArr(i) = arr(i) 
    End if 
Next 

Gdy debugowanie to widzę Jeżeli praca oświadczenie więc wiem tylko 2 elementy są kopiowane ale newArr jest pusty na końcu tego. Czego mi brakuje. Jestem programistą PHP, który jest nowy w klasycznym asp i jestem przyzwyczajony do funkcji tablicowych, które sprawiają, że tego typu rzeczy są niepotrzebne. Każda pomoc doceniona. Dziękuję Ci.

+0

Jestem świadomy scripting.dictionary, jednak omawiana tablica jest używana w bardzo dużej witrynie i nie mam dostępu do jej zmiany w tym momencie. –

+1

Naprawdę nie jest to rozwiązanie, ale: nie jest to problem typu bolusa. ASP jest tylko kontenerem dla języka skryptowego, w twoim przypadku VBscript. Twoim problemem jest zatem problem VBscript. Ta wiedza może pomóc w skuteczniejszym wyszukaniu google. – Jeff

Odpowiedz

3

Nie trzeba nową tablicę, możesz po prostu ponownie przypisać elementy i "przyciąć" tablicę:

Const removalIndex = 1 
For x=removalIndex To UBound(arr)-1 
    arr(x) = arr(x + 1) 
Next 
ReDim Preserve arr(UBound(arr) - 1) 

Ten kod usunie element tablicy z indeksu 1 z głównej tablicy. Jeśli nie wiesz z góry indeksu elementu do usunięcia, możesz łatwo go znaleźć za pomocą prostej pętli nad tablicą.

6

Zamiast korzystać z tablicy, możesz wypróbować jedną próbkę: Scripting.Dictionary.

Jest znacznie bardziej elastyczny i ma między innymi metodę Remove.

+0

Niestety nie mam dostępu do tworzenia tablicy. Jest to bardzo duża strona i używana tablica jest używana w całym tekście. W tej chwili niemożliwe jest odejście od tego. –

4

Proponuję użyć Scripting.Dictionary i używać go jako listy/kolekcji, ponieważ pozwala na wstawianie i usuwanie. Zobacz tutaj: Lists in VBScript

0

Nie znam ostatecznej odpowiedzi, ale gdybym miał zrobić dźgnięcie w ciemne domysły, zasugerowałbym, że skoro tablica jest dwuwymiarowa, być może musisz wyraźnie odnieść się do niej w ten sposób ?

Dim newArr,i 
Redim newArr(Ubound(arr),3) 

For i = 0 to Ubound(arr) 
    If (CStr(arr(i)(0)) <> 7) Then 
     newArr(i)(0) = arr(i)(0) 
     newArr(i)(1) = arr(i)(1) 
     newArr(i)(2) = arr(i)(2) 
    End if 
Next 
0

Widzę niektóre problemy z składnią VBScript. Po pierwsze:

arr(0)(0) = 3 'ERROR: Subscript out of range 
arr(0, 0) = 3 'CORRECT 

Następny:

ReDim newArr(Ubound(arr)) 'this is 1 dimensional array 
newArr(0) = arr(0)   'this will NOT work 
newArr(0) = arr(0, 0)  'this will work 

I wreszcie: dlaczego konwertować do String a następnie porównać go do Integer z:

(CStr(arr(i)(0)) <> 7)