2013-02-01 3 views
0

Comment puis-je stocker plusieurs valeurs différentes dans Dictionary sous une clé?Une clé et de nombreuses valeurs différentes dans le dictionnaire

J'ai un code ici:

Dictionary<string, DateTime> SearchDate = new Dictionary<string, DateTime>(); 

SearchDate.Add("RestDate", Convert.ToDateTime("02/01/2013")); 
SearchDate.Add("RestDate", Convert.ToDateTime("02/28/2013")); 

mais dans le dictionnaire i appris qu'une seule clé unique est permis, donc mon code produit erreur.

+2

Vous avez besoin d'un 'Dictionnaire >' –

+0

Ceci est appelé un [ "Multimap"] (http://en.wikipedia.org/wiki/Multimap) et ne peut pas être mis en œuvre par le IDictionary contrat (bien que vous puissiez faire 'Dictionary >' ou similaire manuellement). Si vous utilisez LINQ, envisagez d'utiliser [Lookup] (http://msdn.microsoft.com/en-us/library/bb460184.aspx), même si cela a d'autres implications. –

+1

http://stackoverflow.com/questions/569903/multi-value-dictionary, http://stackoverflow.com/questions/3639972/a-dictionary-with-multiple-entries-with-the-same-key-c -sharp, http://stackoverflow.com/questions/10089850/c-sharp-dictionary-how-to-add-multiple-values-for-single-key, http://stackoverflow.com/questions/2101069/c -sharp-dictionary-one-clé-many-values? rq = 1, etc (-1 parce que je les ai trouvées avec '[C#] dictionary multiple' et' [C#] dictionary many' - vous pourriez avoir aussi!) –

Répondre

3

La façon la plus simple est de faire un Dictionary d'une sorte de récipient, par exemple

Dictionary<string,HashSet<DateTime>> 

ou

Dictionary<string,List<DateTime>> 
-1

Vous pouvez utiliser la classe Lookup si vous utilisez .NET 3.5

+2

Une chose à savoir est Lookup n'est pas mutable. Vous ne pouvez pas ajouter plus d'éléments une fois qu'il a été créé. –

2

Vous pouvez essayer d'utiliser un Lookup Class. Pour créer, vous pouvez utiliser Tuple Class:

var l = new List<Tuple<string,DateTime>>(); 
l.Add(new Tuple<string,DateTime>("RestDate", Convert.ToDateTime("02/01/2013"))); 
l.Add(new Tuple<string,DateTime>("RestDate", Convert.ToDateTime("02/28/2013"))); 

var lookup = l.ToLookup(i=>i.Item1); 

Cependant, si vous avez besoin de modifier la recherche, vous devrez modifier la liste originale des tuples et mettre à jour la recherche de celui-ci. Donc, cela dépend de combien de fois cette collection a tendance à changer.

3

Utilisez Dictionary<string, List<DateTime>>. Accédez à la liste par la clé, puis ajoutez le nouvel élément à la liste.

Dictionary<string, List<DateTime>> SearchDate = 
    new Dictionary<string, List<DateTime>>(); 
... 
public void AddItem(string key, DateTime dateItem) 
{ 
    var listForKey = SearchDate[key]; 
    if(listForKey == null) 
    { 
     listForKey = new List<DateTime>(); 
    } 
    listForKey.Add(dateItem); 
} 
Questions connexes