Se sto accumulando dati senza informazioni preventive sul numero di elementi, posso usare un array e ingrandirlo secondo necessità usando Redim Preserve
, ma un List di solito sarà più efficiente. Per esempio:È possibile aggiornare gli elementi all'interno di un elenco (di struttura)?
Dim vehicle As New List(Of String)(4)
vehicle.Add("car")
vehicle.Add("bicycle")
vehicle.Add("truck")
vehicle.Add("taxi")
vehicle.Add("motorbike")
vehicle.Add("bus")
Anche se la mia ipotesi di 4 come il numero massimo di elementi è stato sbagliato, posso aggiungere nuovi elementi senza problemi.
posso visualizzare gli elementi così:
For inx = 0 To vehicle.Count - 1
Debug.Print(" " & inx & " " & vehicle(inx))
Next
e ricevere:
0 car
1 bicycle
2 truck
3 taxi
4 motorbike
5 bus
posso aggiornare elementi come richiesto e visualizzare nuovamente:
vehicle(2) = "coach"
vehicle(4) = "cart"
For inx = 0 To vehicle.Count - 1
Debug.Print(" " & inx & " " & vehicle(inx))
Next
per ottenere:
0 car
1 bicycle
2 coach
3 taxi
4 cart
5 bus
posso creare una lista di strutture quasi con la stessa facilità:
Structure SpersonDtl
Dim familyName As String
Dim givenName As String
Dim age As Integer
End Structure
Dim personDtl As New List(Of SpersonDtl)(4)
Dim personDtlCrnt As SpersonDtl
personDtlCrnt.familyName = "Smith"
personDtlCrnt.givenName = "John"
personDtlCrnt.age = 20
personDtl.Add(personDtlCrnt)
personDtlCrnt.familyName = "Brown"
personDtlCrnt.givenName = "Clare"
personDtlCrnt.age = 21
personDtl.Add(personDtlCrnt)
personDtlCrnt.familyName = "Wilson"
personDtlCrnt.givenName = "David"
personDtlCrnt.age = 22
personDtl.Add(personDtlCrnt)
personDtlCrnt.familyName = "Fox"
personDtlCrnt.givenName = "Wendy"
personDtlCrnt.age = 23
personDtl.Add(personDtlCrnt)
visualizzazione del contenuto della lista con:
For inx = 0 To personDtl.Count - 1
Debug.Print(" " & inx & " " & personDtl(inx).givenName & " " & _
personDtl(inx).familyName & " " & personDtl(inx).age)
Next
dà:
0 John Smith 20
1 Clare Brown 21
2 David Wilson 22
3 Wendy Fox 23
Se personDtl fosse un array, I potrebbe aggiornare facilmente un elemento. Per correggere l'età di Wendy, avrei scritto:
personDtl(3).age = 24
Tuttavia, la stessa istruzione con una lista, si traduce in una linea blu sotto personDtl(3).age
e il messaggio di errore: "espressione è un valore e quindi non può essere bersaglio di . La soluzione migliore di un incarico "
che ho trovato è:
Dim personDtlCrnt As SpersonDtl
personDtlCrnt = personDtl(3)
personDtlCrnt.age = 24
personDtl(3) = personDtlCrnt 'Write back.
Nella mia domanda, mi sto accumulando informazioni in grandi, strutture complesse. Per copiare un elemento fuori dalla lista, aggiungere una nuova informazione e poi copiarlo non sarebbe un processo efficiente.
Sarei grato per qualsiasi suggerimento per un approccio alternativo.
Grazie per il collegamento. Questo richiederà una lettura attenta. –
Posso trovare un sacco di aiuto per le liste e un sacco di aiuto per le classi, ma nessuno per le liste di classi. Tuttavia, sono riuscito a far funzionare il mio piccolo test case. Avrò bisogno di dedicare più tempo allo studio e alla sperimentazione, ma questo è ovviamente l'approccio corretto. Grazie. –