Dizionario multi valore

Come potrei creare un dizionario a più valori in c #?

Es. Dictionary dove la prima T è la chiave e gli altri due sono valori.

quindi questo sarebbe ansible: Dictionary

Grazie

Basta creare un tipo Pair e usarlo come valore.

Ho un esempio di uno nel mio C # nel codice sorgente di profondità . Riprodotto qui per semplicità:

 using System; using System.Collections.Generic; public sealed class Pair : IEquatable> { private readonly TFirst first; private readonly TSecond second; public Pair(TFirst first, TSecond second) { this.first = first; this.second = second; } public TFirst First { get { return first; } } public TSecond Second { get { return second; } } public bool Equals(Pair other) { if (other == null) { return false; } return EqualityComparer.Default.Equals(this.First, other.First) && EqualityComparer.Default.Equals(this.Second, other.Second); } public override bool Equals(object o) { return Equals(o as Pair); } public override int GetHashCode() { return EqualityComparer.Default.GetHashCode(first) * 37 + EqualityComparer.Default.GetHashCode(second); } } 

Se si sta tentando di raggruppare i valori insieme, questa potrebbe essere una big opportunità per creare una struttura o una class semplice e utilizzarla come valore in un dizionario.

 public struct MyValue { public object Value1; public double Value2; } 

allora potresti avere il tuo dizionario

 var dict = new Dictionary(); 

potresti anche fare un ulteriore passo avanti e implementare la tua class di dizionario che gestirà tutte le operazioni speciali di cui avresti bisogno. ad esempio se si desidera avere un metodo Add che accetta un int, object e double

 public class MyDictionary : Dictionary { public void Add(int key, object value1, double value2) { MyValue val; val.Value1 = value1; val.Value2 = value2; this.Add(key, val); } } 

quindi potresti semplicemente istanziare e aggiungere al dizionario in questo modo e non dovresti preoccuparti di creare le strutture di “MyValue”:

 var dict = new MyDictionary(); dict.Add(1, new Object(), 2.22); 
 Dictionary> 

Modifica: Scusa – Ho dimenticato che non ottieni Tuples fino a quando esce .NET 4.0. D’oh!

Penso che questo sia abbastanza esagerato per una semantica del dizionario, dal momento che il dizionario è per definizione una raccolta di chiavi e i relativi valori, proprio come il modo in cui vediamo un libro di dizionario che contiene una parola come chiave e il suo significato descrittivo come valore.

Ma puoi rappresentare un dizionario che può contenere un insieme di valori, ad esempio:

 Dictionary> 

O un dizionario di una chiave e il valore come dizionario:

 Dictionary> 

Quindi avrai un dizionario che può avere più valori.

Non penso che tu possa farlo direttamente. Puoi creare una class contenente sia il tuo object che il double e inserirne comunque un’istanza nel dizionario.

 class Pair { object obj; double dbl; } Dictionary = new Dictionary(); 

Se i valori sono correlati, perché non incapsularli in una class e basta usare il semplice vecchio dizionario?

Descrivi un multimap.

Puoi rendere il valore un object List, per memorizzare più di un valore (> 2 per l’estensibilità).

Sostituisci l’object dizionario.

Ho risolto utilizzando:

 Dictionary 

Come questo

 Dictionary result = new Dictionary(); result.Add(1, new string[] { "FirstString", "Second" } ); } return result; 

So che questo è un thread vecchio, ma – dal momento che non è stato menzionato questo funziona

  Dictionary LookUp = new Dictionary(); LookUp.Add("bob", new { age = "23", height = "2.1m", weight = "110kg"}); LookUp.Add("jasper", new { age = "33", height = "1.75m", weight = "90kg"}); foreach(KeyValuePair entry in LookUp ) { object person = entry.Value; Console.WriteLine("Person name:" + entry.Key + " Age: " + person.age); }