BLOCCHI INCORPORATI DIZIONARIO (Dictionaries blocks)

I dizionari sono strutture di dati che associano un valore, spesso chiamato chiave (Key), con un altro valore. Un modo comune di visualizzare dizionari è l’utilizzo di JSON. I dizionari appartengono a App Inventor, Kodular ma non a Thunkable X.

Introduzione

Un dizionario è una raccolta (collection in inglese) non ordinata di oggetti indirizzati tramite chiavi (invece che per posizione come nelle mappe)

I dizionari, chiamati in altre lingue come mappe, matrici o elenchi associativi, sono strutture di dati che associano un valore, spesso chiamato chiave (Key), con un altro valore. Un modo comune di visualizzare dizionari è l’utilizzo di JavaScript Object Notation (JSON  [1]), ad esempio: { "id":  1, "name":  "Tim the Beaver", "school": { "name": "Massachusetts Institute of Technology" }, "enrolled": true, "classes": ["6.001", "18.01", "8.01"] } L’esempio sopra mostra che in JSON le chiavi (testo tra virgolette prima del 🙂 possono essere associate a diversi tipi di valori. I tipi consentiti sono numeri, testo, altri dizionari, booleani ed elenchi. Nella lingua dei blocchi, puoi eseguire il bulid di questo dizionario come segue: Una rappresentazione a blocchi del dizionario mostrato sopra

Figura 1 : una rappresentazione a blocchi dello snippet di codice JSON mostrato sopra.

Crea un dizionario vuoto – create empty dictionary

Il blocco create empty dictionary crea un dizionario senza coppie chiave-valore. Le voci possono essere aggiunte al dizionario vuoto usando il blocco set value for key. Il blocco create empty dictionary può anche essere trasformato in un blocco make a dictionary utilizzando il pulsante di mutatore blu per aggiungere voci pair (coppia).

Componi un dizionario – make a dictionary

Il make a dictionary viene utilizzato per creare un dizionario con una serie di pairs note in anticipo. Ulteriori voci possono essere aggiunte utilizzando set value for key.

Coppia – pair

Il blocco pair è un blocco speciale utilizzato per costruire dizionari.

Ottieni valore da chiave – get value for key

Il blocco get value for key verifica se il dizionario contiene un valore corrispondente per la chiave specificata. In tal caso, il valore viene restituito. In caso contrario, il valore del parametro not found (non trovato) viene restituito . Questo comportamento è simile al comportamento del blocco lookup in pairs.

Imposta valore da chiave – set value for key

Il blocco set value for key imposta il valore corrispondente per il dato key nel dictionary a value. Se non esiste alcuna mappatura per key, ne verrà creata una nuova. In caso contrario, il valore esistente viene sostituito dal nuovo valore.

Elimina entrate per chiave – delete entry for key

Il blocco delete entry for key rimuove la mappatura dei valori-chiave nel dizionario per la chiave specificata. Se nel dizionario non esiste alcuna voce per la chiave, il dizionario non viene modificato.

Ottieni valore a percorso di chiave – get value at key path

Il blocco get value at key path è una versione più avanzata del get value for key. Invece di ottenere il valore di una chiave specifica, prende invece un elenco di chiavi e numeri validi che rappresentano un percorso attraverso una struttura di dati. Il blocco get value for key equivale a utilizzare questo blocco con un percorso chiave di lunghezza 1 contenente la chiave. Ad esempio, i seguenti due blocchi restituirebbero “Tim the Beaver“: Questo scorre la struttura dei dati, a partire dal dizionario iniziale, usando il path (percorso) fornito, al fine di recuperare i valori nidificati in profondità nelle strutture di dati complessi. È utilizzato al meglio per l’elaborazione di dati JSON da servizi Web. A partire dall’input iniziale, prende il primo elemento in key path e controlla se in quel punto esiste una chiave (se l’input è un dizionario) o un indice (se l’input è un elenco). In tal caso, seleziona quell’elemento come input e procede a controllare l’elemento successivo in key path , continuando fino a quando non è stato seguito l’intero percorso, a quel punto restituisce ciò che si trova in quella posizione o il parametro not found (non trovato) . Esempi { "id":  1, "name":  "Tim the Beaver", "school": { "name": "Massachusetts Institute of Technology" }, "enrolled": true, "classes": ["6.001", "18.01", "8.01"] } Ad esempio, dato il dizionario JSON sopra, il seguente uso get value at key path produrrà il risultato “Massachusetts Institute of Technology”. Il get value at key path< consente al percorso di includere numeri che rappresentano l’indice degli elementi da attraversare quando i dizionari e gli elenchi vengono mescolati. Ad esempio, se volessimo conoscere la seconda classe che stava prendendo Tim, potremmo fare quanto segue: che restituisce il valore “18.01”.

Imposta valore a percorso di chiave – set value for key path

Il blocco set value for key path aggiorna il valore a uno specifico key path in una struttura di dati. È accoppiato al get value at key path, che recupera un valore in uno specifico key path . Il percorso deve essere valido , ad eccezione dell’ultima chiave, che se non esiste un mapping creerà un mapping al nuovo valore. In caso contrario, il valore esistente viene sostituito con il nuovo valore.

Ottieni chiavi – get keys

Il get keys restituisce un elenco di chiavi nel dizionario.

Ottieni valori – get values

Il get values restituisce una lista contenente i valori nel dizionario. La modifica del contenuto di un valore nell’elenco lo modificherà anche nel dizionario.

La chiave è nel dizionario? – is key in dictionary?

Il is key in dictionary? testa se esiste la chiave nel dizionario e ritorna true se lo fa, altrimenti restituisce false.

Dimensione del dizionario – size of dictionary

Il blocco size of dictionary restituisce il numero di coppie chiave-valore presenti nel dizionario.

Lista di coppie a dizionario – list of pairs to dictionary

Il blocco list of pairs to dictionary converte un elenco associativo del modulo ((key1 value1) (key2 value2) ...) in un dizionario che associa le chiavi ai loro valori. Poiché i dizionari offrono prestazioni di ricerca migliori rispetto agli elenchi associativi, se si desidera eseguire molte operazioni su una struttura di dati, è consigliabile utilizzare questo blocco per convertire prima l’elenco associativo in un dizionario.

Dizionario a lista di coppie – dictionary to list of pairs

Il dictionary to list of pairs converte un dizionario in una lista associativa. Questo blocco inverte la conversione eseguita dal blocco list of pairs to dictionary. Esempio di come il dizionario per elencare il blocco di coppie inverte l’elenco di coppie nel blocco di dizionario

Copia dizionario – copy dictionary

Il copy dictionary fa una copia profonda del dizionario dato. Ciò significa che tutti i valori vengono copiati in modo ricorsivo e che la modifica di un valore nella copia non lo modificherà nell’originale.

Unisci nel dizionario – merge into dictionary

Il blocco merge into dictionary from dictionary copia le coppie chiave-valore da un dizionario a un altro, sovrascrivendo qualsiasi chiave nel dizionario di destinazione.

list by walking key path

Il list by walking key path funziona in modo simile al get value at key path, ma crea un elenco di valori anziché restituire un singolo valore. Funziona partendo dal dizionario dato e “cammina” (walking) lungo l’albero degli oggetti seguendo il percorso indicato. A differenza del get value at key path però, il suo percorso può essere composto da tre tipi principali: chiavi del dizionario, indici di elenco e il blocco walk all at level. Se viene fornita una chiave o un indice, il percorso specifico viene preso in quel punto dell’albero. Se walk all at level viene specificato, ogni valore in quel punto viene seguito in successione (larghezza prima), a quel punto la camminata continua dall’elemento successivo nel percorso. Qualsiasi elemento che corrisponde all’intero percorso viene aggiunto all’elenco di output. Esempi Considera i seguenti JSON e blocchi: { "people": [{ "first_name": "Tim", "last_name": "Beaver" },{ "first_name": "John", "last_name": "Smith", },{ "first_name": "Jane", "last_name": "Doe" }] } Se global data contiene un dizionario rappresentato da JSON, il list by walking key path produrrà l’elenco [“Tim”, “Beaver”]. Innanzitutto, il tag del valore “people” , che è l’elenco delle persone, viene scelto. Successivamente, viene scelto il primo elemento nell’elenco. Infine, il blocco walk all at level seleziona i valori nell’oggetto in quel punto, cioè i valori “Tim”e “Beaver”. È inoltre possibile utilizzare walk all at level a un livello contenente un elenco. Ad esempio, il blocco seguente seleziona i nomi (first name = nomi propri n.d.r.) di tutte le persone nella struttura, ad es [“Tim”, “John”, “Jane”]. Questo blocco può essere utilizzato anche con XML parsed (= analizzatore di XML. Tutti i principali browser hanno un analizzatore XML integrato per accedere e manipolare XML) utilizzando il blocco Web.XMLTextDecodeAsDictionary . Considera il seguente documento XML: <schedule> <day> <room name="Hewlitt" /> <room name="Bleil" /> </day> <day> <room name="Kiva" /> <room name="Star" /> </day> </schedule> È possibile utilizzare i seguenti blocchi per ottenere un elenco dei nomi delle stanze il primo giorno, ad es [“Hewlitt”, “Bleil”].

walk all at level

Il walk all at level è un blocco specializzato che può essere utilizzato nel percorso chiave di a list by walking key path. Quando viene incontrato durante una passeggiata, viene esplorato ogni oggetto a quel livello. Per i dizionari, ciò significa che viene visitato ogni valore. Per gli elenchi, ogni elemento nell’elenco viene visitato. Questo può essere usato per aggregare informazioni da un elenco di elementi in un dizionario, come il nome di ogni persona in un database rappresentato da oggetti JSON. Vedi il blocco list by walking key path  per esempi.

E’ un dizionario? – is a dictionary?

Il blocco is a dictionary? verifica se la “cosa” data (valore/oggetto) è un dizionario o meno. Restituirà true se il valore/oggetto è un dizionario e in caso false contrario. https://community.appinventor.mit.edu/t/one-way-to-store-daily-appointments-in-a-dictionary-structure/9723   [1] Un interessante articolo sui dati JSON si trova qui http://ai2.appinventor.mit.edu/reference/other/json-web-apis.html .

Aggiornato al 01/01/2021
Aggiornato al 01/01/2021
   

Vuoi avere più informazioni sul Codin visuale? Vai alla pagina dei Componenti e comportamenti dove potrai imparare a scrivere il linguaggio di programmazione per App Inventor 2, Kodular e Thunkable X. Visita la pagina del Blog con le ultime notizie sulle le tre piattaforme. Nella pagina Documentazione troverai i collegamenti ai forum, il glossario, i link ai siti dei migliori programmatori, i download e tanti altri accessori.