2011-02-02 1 views

Répondre

5

Vous pouvez le faire facilement avec .NET 4:

var dictionary = listints.Zip(listdates, (value, key) => new { value, key }) 
         .ToDictionary(x => x.key, x => x.value); 

Sans .NET 4, il est un peu plus difficile, mais vous pouvez toujours utiliser un hack crado:

var dictionary = Enumerable.Range(0, listints.Count) 
          .ToDictionary(i => listdates[i], i => listints[i]); 

EDIT: Comme par commentaire, cela fonctionne très bien avec une variable typée explicitement à:

IDictionary<DateTime, int> kamptslist = 
    listints.Zip(listdates, (value, key) => new { value, key }) 
      .ToDictionary(x => x.key, x => x.value); 
+0

@Misnomer: Vous pouvez explicitement déclarer la variable, oui - dans les deux cas, il va vraiment être * * un 'Dictionnaire ' bien. –

+0

Yea..désolé négligé quelque chose d'autre..et pensé que c'était un problème .. – Vishal

6

Utilisez Enumerable.Zip pour zipper les deux Sequ rences ensemble, puis utilisez Enumerable.ToDictionary:

var kamptslist = listdates.Zip(listints, (d, n) => Tuple.Create(d, n)) 
          .ToDictionary(x => x.Item1, x => x.Item2); 
+0

Je préfère utiliser un type anonyme ici, car alors vous pouvez voir ce qui va être une clé plus facilement. –

+0

@Jon Skeet: Oh, je ne sais pas à ce sujet. Vous devez savoir quel paramètre est la clé, et quelle est la valeur dans 'ToDictionary' de toute façon. Je suppose que vous pourriez utiliser des paramètres nommés pour le rendre clair, mais sans cela, il suffit d'utiliser un type anonyme ne le rend pas plus clair IMO. – jason

+0

Oui, bien que Intellisense vous le montre pendant que vous l'écrivez. En d'autres termes: * Je * trouve plus simple de voir ce qui se passe avec mon code qu'avec le vôtre - mais il faut s'y attendre, bien sûr :) –

0
IDictionary<DateTime, int> kamptslist = GetListofdates() 
    .Zip(
     GetListofints(), 
     (date, value) => new { date, value }) 
    .ToDictionary(x => x.date, x => x.value); 
Questions connexes