Newsgroup: it.comp.lang.visual-basic
Titolo: Dizionari (Generics) - dot NET

Stimatissimi Visual"basici" (chimicamente parlando),
sono molto tardo, ma non riesco a discernere la logica del
System.Collection.Generic.Dictionary (Of TypeT, Value) etc etc
Ossia, non riesco a capire chiaramente i ruoli di Chiavi e 
Valori.
A me l'associazione biunivoca (anche se non simmetrica), 
rende confuso il funzionamento.
So che le CHIAVI devono essere univoche, i valori associati no.
Indi può esistere uno stesso valore associato a più chiavi, 
ma non una stessa chiave associata a più valori.
Ora io volevo per prova fare un programmino che parserizza 
un testo e ne compone un dizionario, in modo da individuare 
tutte le parole distinte che vi compaiono, ma che nel 
dizionario siano presenti una sola volta, e come valore 
associato ci sia il numero di occorrenze trovate nel testo.
Allora, come dichiaro il dizionario ?
Dictionari(Of String, Integer)
o
Dictionari(Of Integer, String)
?
Dovrei arrivarci, ma mi intorcino.
Abbiate pietà e datemi una dritta
ciao
e grazie
P.S.
sto resistendo alla tentazione di rifare la ruota da zero, 
perché ho letto che in ricerca sto oggetto built-in 
approssima O(1) come efficienza algoritmica, e la cosa mi 
attizza assai perché ne farei un uso pesante
riciao
Soviet

 ?
Dal momento che vuoi associare una parola al numero delle sue occorrenze,
	Dictionary(Of String, Integer)
ï¿œ quella giusta.
-- 
S.

 
grazie. Si, funziona, in effetti la parte variabile è la 
seconda dei valori.
Altra cosa .... si possono ORDINARE i dizionari, per chiavi 
crescenti o per valori crescenti ?
Ho visto solo un metodo OrdersBy o simili, ma non riuscivo 
nemmeno a decifrare la finestra tooltip relativa alla 
procedura. Mi aspettavo un metodo senza parametri, ma sembra 
complicatissimo ..
ciao & grazie
Soviet_Mario

 metodo senza parametri, ma sembra complicatissimo ..
Sempre nello stesso namespace trovi SortedDictionary, si occupa lui di tenere in 
ordine gli elementi.
E' la soluzione pi� semplice, e forse la pi� lenta.
In alternativa puoi perderti a fare magheggi incredibili con il metodo Sort() di 
List, o con gli array, o con chiss� che altro.
Se invece, come sembra, hai la possibilit� di usare LINQ, puoi fare una cosa del 
genere (totalmente scritta al volo e non testata):
	var d = new Dictionary<string, int>();
	// popoli il dizionario
	var ret = from p in d.Keys orderby p ascending select p;
(dove 'p' sta per 'parola').
Se poi sostituisci 'select p' con:
	select new { Parola = p, Occorrenze = d[p] };
ottieni una collezione di anonymous types, che potrebbe tornarti utile.
Questo dovrebbe ordinare per chiave. Se vuoi ordinare per valore devi cambiare 
qualcosina.
Mi sono reso conto di aver usato C# invece di VB, ma non dovrebbe essere 
difficile tradurre dall'uno all'altro.
In pi� non conosco la sintassi di LINQ sotto VB (e onestamente non sono molto 
interessato ad impararla).
-- 
S.

 mondo che cmq mi � sconosciuto e a cui non sono interessato.
Non occorre imparare SQL per usare LINQ.
Io stesso non avevo preso LINQ seriamente, invece poi...
Dacci un'occhiata lo stesso cos� per sfizio, l'help � molto esaustivo.
-- 
S.

 incuriosisce la cosa (� telepatia ? :-)))
E' una novit� introdotta in .NET 3.5 e VB2008, quindi lo possiedi.
D� la possibilit� di utilizzare delle query con sintassi simile a SQL, 
ma applicabile a oggetti come collection e array invece che a 
convenzionali database (LINQ To Object). E' uno strumento estremamente 
potente, trovi parecchia documentazione su internet.
Un semplice esempio per darti una idea dello strumento:
http://community.visual-basic.it/alessandro/archive/2008/02/20/22030.aspx
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Scarica "OpenOffice.org 3.0 Soluzioni a raccolta", molto pi� di semplici 
FAQ! 
http://it.openoffice.org/doc/manuali/