2012-04-20 3 views
34

Non ho molta esperienza con C# e sono utilizzato da PHP con array associativi.Qual è il modo più semplice per gestire array associativi in ​​C#?

Vedo che in C# è la classe List e l'array raw, ma vorrei associare alcune chiavi stringa in qualche momento.

Qual è il modo più semplice per gestirlo?

Thx!

+5

@Servy: Solo per nitpick su alcuni termini, ** no **, è un ** array associativo **. Radu è corretto. http://en.wikipedia.org/wiki/Associative_array. Inoltre, ci sono numerose lingue in cui gli array non sono indicizzati dai numeri; JavaScript è uno. E mentre critichiamo la terminologia: un ** array associativo ** non deve essere implementato come una ** tabella hash **. Stai confondendo un * tipo di dati astratti * con i suoi * dettagli di implementazione *. Ad esempio, un array associativo potrebbe essere implementato da un albero binario bilanciato. –

+0

Grazie per il chiarimento Eric. – Servy

risposta

61

Utilizzare la classe Dizionario. Dovrebbe fare quello che ti serve. Il riferimento è here.

Così si può fare qualcosa di simile:

IDictionary<string, int> dict = new Dictionary<string, int>(); 
dict["red"] = 10; 
dict["blue"] = 20; 
+2

Comprendi che un dizionario non consente l'indicizzazione lineare (a meno che non sia così che lo hai digitato), quindi nell'esempio sopra, 'dict [0]' (un tentativo di ottenere il primo elemento del Dizionario) non verrà compilato. Puoi aggirare questo in diversi modi; il più semplice è usare Linq per enumerare gli oggetti KeyValuePair del Dizionario uno alla volta. Tuttavia, l'ordine non è garantito (o almeno è garantito solo in virtù di un dettaglio di implementazione). – KeithS

+9

@KeithS Esiste tuttavia un [OrderedDictionary] (http://msdn.microsoft.com/en-us/library/system.collections.specialized.ordereddictionary.aspx) se è richiesta la funzionalità. – Servy

+1

Completamente giusto e funzionante! –

12

Un dizionario funzionerà, ma .NET ha array associativi costruite in un caso è la classe NameValueCollection (System.Collections.Specialized.NameValueCollection)..

Un leggero vantaggio rispetto al dizionario è che se si tenta di leggere una chiave inesistente, restituisce null anziché generare un'eccezione. Di seguito sono riportati due modi per impostare i valori.

NameValueCollection list = new NameValueCollection(); 
list["key1"] = "value1"; 

NameValueCollection list2 = new NameValueCollection() 
{ 
    { "key1", "value1" }, 
    { "key2", "value2" } 
};