Dictionary in VBScript

giusto per capire se sono sulla strada sbagliata:
ma nei dict in vbs è possibile conoscere quanti oggetti ci sono in una chiave?

ps di tratta di dict con una chiave e elementi annidati di array

La chiave per definizione è univoca. Pertanto ad ogni chiave un solo oggetto.
Dovresti fare un annidamento dictionary di dictionary … se vale la pena.

Ciao

ciao Sergio, grazie per la risposta

beh annidamento dictionary di dictionary non era la mia intenzione
si la chiave è univoca ma gli elementi multidimensione
è stata dura ci ho sbattuto la testa ma ce lo fatta

non so per quale regola la sintassi è questa:

var = dict.Items e poi var(?)(?)

mentre dict.Items(?)(?) non va bene

mi meraviglio sempre quando si usa una funzione/metodo nuovo anche se in teoria sai quello che devi fare e come deve essere suddiviso, il tempo che ci vuole per azzeccare la sintassi giusta. e vabbè un saluto.

Ciao Salvio (premetto che non ho mai usato dictionary) come riportato in questa pagina https://developer.rhino3d.com/guides/rhinoscript/vbscript-dictionaries/

“However, a dictionary can only store one item for each key value. That is, dictionary keys must all be unique.”

Quindi, se ho capito bene, non puoi creare un array multidimensionale direttamente con dictionary (è di fatto un array monodimensionale con l’indice alfanumerico anzichè solamente numerico).
Spero che l’articolo segnalato ti chiarisca il funzionamento.
Ciao

Ps: da tenere a mente quanto detto alla fine:
The Dictionary object is not there to replace the array, but there are certainly times when it makes more sense to index your array using English-like terms as opposed to numerical values.

Salvio, perche’ usi Items per leggere il dizionario ? :slight_smile:

Cosi’ funziona:

Dim ar(3), br(3)
Set diz = createobject("Scripting.Dictionary")
For i=0 To 3
	ar(i) = br
Next
For i=0 To 3
	For j=0 To 3
		ar(i)(j) = i * 10 + j
	Next
Next
diz.add "3x3", ar
rhino.print cstr( diz("3x3")(2)(2) )
1 Mi Piace

ma l’indice per ar(3) non dovrebbe arrivare fino a 2?
Intendo ar(0) , ar(1) , ar(2)

Ciao Lucio

… per quel poco che mi ricordo credo vada da 0 a 3 … o no ? :confused:

( Sono molto arrugginito col VBS … ho piantato su dei casini per riuscire a fare 'sto test … :smile: )

Oddio, non voglio dire una cavolata ma quando dichiari la dimensione a 3 vuol dire che l’indice arriva a 2 perchè si parte da 0… ma mi pare così strano farti notare un errore che probabilmente mi sbaglio io… :smile:
Anzi, sicuramente mi sbaglio io… faccio delle prove…
Infatti, Ar contiene 4 valori 0,1,2,3 quindi è giusto come hai fatto… che pirla che sono, ho ragionato al contrario… è la dichiarazione +1, non -1…

Non so a cosa ti serva ma a me non piace molto come approccio. Anzi, non ne vedo proprio l’utilità in ambito script visto che l’oggetto verrà creato e di seguito distrutto al termine dello script. Io opterei per documentdata.

Sergio

Lucio … tu non lo sai :wink: … ma stai gia’ ragionando per Python …

:smile::smile::smile:

Argh!!! Sapevo che a guardare tutti quegli esempi di python mi avreste rovinato!!! Accidenti!!! Proprio adesso che mi arriva un altro laser e mi tocca aggiornare gli script esistenti… verrà fuori un pastroccio!!! :sweat_smile:

1 Mi Piace

… ben oltre Emilio … C++: daje Lucio!!!

:joy::joy::rofl:

1 Mi Piace

Hehe … io a far passare Lucio a Python non ci sono riuscito …

Prova tu col C++ …

:wink:

Se insistiamo troppo @lucio_zadra si da’ alla macchia e @giuseppe ci scomunica.
Meglio evitare.

ciao Lucio si quel link lo avevo trovato e mi è stato utile per capire alcune cose che non sapevo grazie.

ciao Emilio si l’esempio che hai fatto è giusto, io mi riferivo a gestirlo dopo tutti insieme tramite for :+1:

ciao Sergio in effetti è stata dura trovare un esempio per capire come fare si vede che non è ortodosso
in un certo senso quello che ho fatto adesso, è capire come funzionasse per poi valutare se adoperarlo

non so se sia la stessa cosa ma il mio pensiero originale sarebbe quello di inserire i dati in GetUserText
questo in teoria dovrebbe essere un’alternativa alla forum che avete tutti contribuito “ApplyCurvePiping”.

No no, uso il compilatore “omino bianco”! Non temo macchie… :grimacing:
'naltro paio di post e poi riesco a fare tutto in cobol!

2 Mi Piace

Devi vedere tu cosa è più funzionale. Potresti usare DocumentData per risalire a tutti gli oggetti tramite ID e User Data per i dati specifici dell’oggetto.

scusa Sergio non conosco DocumentData e non riesco a trovare documentazione

come funziona?

Rhino.documentdata ti permette di salvare dati all’interno del file di lavoro.
Io lo uso molto spesso per parametri che voglio mantenere anche una volta chiusa la sessione di rhino.
Ad esempio i parametri di taglio, tempi, calcoli dei costi… tutte robe che faccio tramite script ma che voglio poter recuperare anche a distanza di tempo.
developer.rhino3d.com/api/rhinoscript/user_data_methods/setdocumentdata.htm

ciao Lucio grazie per il link non ero riuscito a trovare nulla a riguardo

non so se sia adatto più o meno a ciò che avevo in mente
spiego quale sia la mia idea:

avvio lo script, seleziono la curva dove recupero ID
e seleziono coppie di punti sulla curva

e volevo memorizzare ID e gli array di coppie di punti in “SetDocumentUserText”
in modo che succesivamente da poter recuperare i valori per poterli gestire

che ne pensate? ditemi i vostri consigli e opinioni anche su “DocumentData”