Quando si lavora su un array associativo una delle principali attività è quella di scorrere il suo contenuto per cercare uno specifico elemento.
Ricerca elementi in un array associativo
La ricerca di uno specifico elemento all’interno di un array associativo può avvenire iterando uno dei comandi array names o array get.
Entrambi questi comandi restituiscono delle liste.
Nel caso del comando array names, se ne abbiamo la necessità, possiamo anche sfruttare il comando lsort per ordinare il risultato.
Invece, nel caso del comando array get, non possiamo utilizzare il comando lsort sul risultato in quanto si rischierebbe di perdere il corretto accoppiamento nome-valore. Provare per credere! 🙂
# esempio
set myProfile(name) "John"
set myProfile(surname) "Doe"
set myProfile(age) "42"
puts "List of Names"
foreach onlyNames [lsort [array names myProfile]] {
puts "I found $onlyNames in myProfile."
}
puts "List of Elements"
foreach {name value} [array get myProfile] {
puts "I found \"$name: $value\" in myProfile."
}
---
List of Names
I found age in myProfile.
I found name in myProfile.
I found surname in myProfile.
List of Elements
I found "age: 42" in myProfile.
I found "name: John" in myProfile.
I found "surname: Doe" in myProfile.
Come passare un array associativo ad una procedura
Per passare un array associativo ad una procedura è necessario sfruttare il comando upvar per creare internamente alla procedura un alias che rimandi al nome dell’array associativo originale. In questo modo è come se il passaggio avvenisse per riferimento e non per valore.
# esempio
proc printElement {myArray} {
upvar $myArray myAlias
puts "$myAlias(1), $myAlias(2)"
}
set myArray(1) "Jane"
set myArray(2) "Doe"
printElement myArray
---
Jane, Doe
Nel prossimo articolo vedremo una alternativa alla struttura dell’array associativo: il dizionario.
