Comment créer un dictionnaire multi-valeurs en c# ?
Par exemple Dictionary<T,T,T>
où le premier T est la clé et les deux autres sont les valeurs.
Cela serait donc possible : Dictionary<int,object,double>
Gracias
Comment créer un dictionnaire multi-valeurs en c# ?
Par exemple Dictionary<T,T,T>
où le premier T est la clé et les deux autres sont les valeurs.
Cela serait donc possible : Dictionary<int,object,double>
Gracias
Si vous essayez de regrouper des valeurs, c'est peut-être l'occasion de créer une structure ou une classe simple et de l'utiliser comme valeur dans un dictionnaire.
public struct MyValue
{
public object Value1;
public double Value2;
}
vous pourrez alors disposer de votre dictionnaire
var dict = new Dictionary<int, MyValue>();
Vous pouvez même aller plus loin et mettre en œuvre votre propre classe de dictionnaire qui gérera toutes les opérations spéciales dont vous avez besoin. Par exemple, si vous souhaitez disposer d'une méthode Add qui accepte un int, un objet et un double
public class MyDictionary : Dictionary<int, MyValue>
{
public void Add(int key, object value1, double value2)
{
MyValue val;
val.Value1 = value1;
val.Value2 = value2;
this.Add(key, val);
}
}
il suffirait alors d'instancier et d'ajouter au dictionnaire de la sorte, sans avoir à se préoccuper de la création de structures "MyValue" :
var dict = new MyDictionary();
dict.Add(1, new Object(), 2.22);
Il suffit de créer un Pair<TFirst, TSecond>
et l'utiliser comme valeur.
J'en ai un exemple dans mon Code source C# en profondeur . Reproduit ici par souci de simplicité :
using System;
using System.Collections.Generic;
public sealed class Pair<TFirst, TSecond>
: IEquatable<Pair<TFirst, TSecond>>
{
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<TFirst, TSecond> other)
{
if (other == null)
{
return false;
}
return EqualityComparer<TFirst>.Default.Equals(this.First, other.First) &&
EqualityComparer<TSecond>.Default.Equals(this.Second, other.Second);
}
public override bool Equals(object o)
{
return Equals(o as Pair<TFirst, TSecond>);
}
public override int GetHashCode()
{
return EqualityComparer<TFirst>.Default.GetHashCode(first) * 37 +
EqualityComparer<TSecond>.Default.GetHashCode(second);
}
}
Je pense que c'est un peu exagéré pour la sémantique d'un dictionnaire, puisque le dictionnaire est par définition une collection de clés et de valeurs respectives, tout comme nous voyons un dictionnaire de livre de langue qui contient un mot comme clé et sa signification descriptive comme valeur.
Mais vous pouvez représenter un dictionnaire qui peut contenir une collection de valeurs, par exemple :
Dictionary<String,List<Customer>>
Ou un dictionnaire d'une clé et la valeur en tant que dictionnaire :
Dictionary<Customer,Dictionary<Order,OrderDetail>>
Vous disposez alors d'un dictionnaire qui peut avoir plusieurs valeurs.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.