2017-10-19 4 views
0

Je voudrais initialiser un dictionnaire avec des tableaux de clés et de valeurs, comme suit:Initialiser un dictionnaire avec des tableaux de clés et des valeurs

int[] keys = {1, 2, 3}; 
string[] values = {"a", "b", "c"}; 
Dictionary<int, string> dict = new Dictionary<int, string>(keys, values); 

Yat-il un rapide façon de le faire sans itérer la tableaux, comme dans:

for (int i = 0; i < keys.Length; ++i) 
{ 
    dict.Add(keys[i], values[i]); 
} 

EDIT: quelqu'un a marqué cette question comme un double de this un, mais ils ne sont pas liés, cette question ne se pose pas de transformer les collections clés-valeurs à un dictionnaire, mais une liste des objets, chaque objet tient une clé et une liste de valeurs dans un dictionnaire.

+4

Une limite inférieure de la complexité est * O (n) *, vous devrez itérer de toute façon. –

Répondre

4

Utilisation Zip():

int[] keys = { 1, 2, 3 }; 
string[] values = { "a", "b", "c" }; 

var dict = keys.Zip(values, (num, str) => new { num = num, str = str }) 
      .ToDictionary(ns => ns.num, ns => ns.str); 

Il ne sera pas plus rapide, et pour tout ce que je sais que cela peut effectivement être un peu plus lent, mais probablement pas assez pour la matière.

Le seul avantage évident qu'il a sur votre boucle for est que Zip() ne lèvera pas une exception si values.Length < keys.Length.


Une fois the C#7 value tuple feature is usable without any nonsense, vous serez en mesure de sauver quelques personnages:

var dict = keys.Zip(values, (num, str) => (num: num, str: str)) 
      .ToDictionary(ns => ns.num, ns => ns.str);