2013-07-19 7 views
5

Dato il seguente matrice come un esempio ...eliminare un elemento da una matrice in ASP classico

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 

Ho bisogno di cancellare l'elemento intermedio (id = 7) dalla matrice. Capisco che ho bisogno di scorrere l'array e spostare ogni record che non deve essere cancellato in un nuovo array. Ho provato così ...

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 

Quando il debug di questo posso vedere il lavoro se dichiarazione quindi so solo 2 elementi sono copiati ma newArr è vuota alla fine di questo. Cosa mi manca Sono un programmatore PHP che è nuovo al classico asp e Im usato per avere funzioni di array che rendono questo tipo di cose inutili. Qualsiasi aiuto apprezzato. Grazie.

+0

Sono a conoscenza di scripting.dictionary, tuttavia, l'array in questione viene utilizzato in un sito molto grande e non ho accesso per modificarlo a questo punto. –

+1

Non proprio una soluzione ma: questo non è un asp-problem. ASP è solo un contenitore per il linguaggio di scripting, nel tuo caso VBscript. Il tuo problema è quindi un problema VBscript. Questa conoscenza può aiutarti a cercare più efficacemente su google. – Jeff

risposta

3

Non è necessario nuovo array, puoi semplicemente riassegnare gli articoli e "ritagliare" l'array:

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

Questo codice rimuoverà la voce dell'array all'indice 1 dall'array principale. Se non conosci in anticipo l'indice dell'articolo da rimuovere, puoi facilmente trovarlo con un semplice ciclo sull'array.

6

Invece di utilizzare l'array, è possibile provare lo Scripting.Dictionary.

È molto più flessibile e ha, tra gli altri, il metodo Remove.

+0

Purtroppo non ho accesso alla creazione dell'array. È un sito molto grande e l'array in questione è utilizzato ovunque. Non è possibile a questo punto allontanarsi da esso. –

4

Suggerisco di utilizzare Scripting.Dictionary e utilizzarlo come elenco/raccolta, in quanto consente di inserire e cancellare. Vedi qui: Lists in VBScript

0

Non conosco la risposta definitiva, ma se dovessi fare una pugnalata al buio suppongo che dal momento che l'array è bidimensionale, forse devi fare esplicitamente riferimento ad esso in questo modo ?

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

Vedo alcuni problemi di sintassi VBScript. Primo:

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

successivo:

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 

E infine: perché si converte al String e poi confrontarlo con un Integer:

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