Quale sarebbe la migliore struttura di dati C# per l'utilizzo di un tasto e l'estrazione di due valori?C# Dictionary, 2 Valori
Essenzialmente ho bisogno di un Dictionary<string, string, string>
. C'è qualcosa di simile?
Quale sarebbe la migliore struttura di dati C# per l'utilizzo di un tasto e l'estrazione di due valori?C# Dictionary, 2 Valori
Essenzialmente ho bisogno di un Dictionary<string, string, string>
. C'è qualcosa di simile?
Se stai usando .NET 4, è possibile utilizzare
Dictionary<string, Tuple<string, string>>
Se non sei, è possibile creare il proprio Tuple
tipo che funziona allo stesso modo :)
In alternativa, se ne hai solo bisogno in un posto dove potresti creare il tuo tipo che incapsula le due stringhe ordinatamente usando nomi appropriati. Per esempio:
public sealed class NameAndAddress
{
private readonly string name;
public string Name { get { return name; } }
private readonly string address;
public string Address { get { return address; } }
public NameAndAddress(string name, string address)
{
this.name = name;
this.address = address;
}
}
quindi è possibile utilizzare:
Dictionary<string, NameAndAddress>
che lo rende molto chiaro che cosa sta per essere memorizzati.
Se si desidera, è possibile implementare l'uguaglianza. Personalmente mi piacerebbe vedere questo genere di cose ha reso più facile - tipi anonimi quasi farlo, ma poi non li posso nominare ...
class A {
public string X, Y;
}
Dictionary<string, A> data;
Creare una struttura che contiene i valori e quindi utilizzare
Dictionary<string, MyStruct> dict = new Dictionary<string, MyStruct>();
è possibile utilizzare un dizionario di KeyValuePairs
Dictionary<string,KeyValuePair<string,string>>
Non mi piace questa idea, anche se * farà * quello che vuoi, è fuorviante - perché la seconda stringa è vista come una chiave per il terzo? –
Sì, hai ragione, ma in alcune situazioni è una soluzione rapida e non così brutta ... In ogni caso un'implementazione personalizzata, o l'uso di Tuple è probabilmente il migliore in generale (ma Tuple è solo in .net 4.0) – digEmAll
-1 Questo è molto fuorviante. Non c'è logica in quale dovrebbe essere una chiave e quale dovrebbe essere un valore in KeyValuePair
Sì, c'è exactly that. Puoi memorizzare i tuoi due valori in una classe o in una struttura. O vuoi qualcos'altro?
Fai una lezione per mantenere il tuo valore e renderlo un dizionario. Se la classe viene utilizzata solo nel contesto di una classe contenente (ad esempio, viene utilizzata per fornire una struttura dati per una proprietà di classe), è possibile rendere la classe una classe nidificata privata.
Ooh tupla ....! –
Sigillato, readonly, proprietà, ... - non confonderlo;) – Danvil
Sigillato, readonly, proprietà, ... - uno dei più concisi esempi immutabili che ho visto. Ma per quanto riguarda l'override di Equals e GetHashCode? :) –