2016-04-20 8 views
2

Mein ArrayRichtiger Weg KeyValuePair von zwei Array

string[] name = "a,b,c,d".Split(',');//key 
string[] path = "w,x,y,z".Split(',');//value 
List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>(); 

und ich zuweisen versuchen Wert wie folgt zugewiesen werden.

foreach (string s in name) 
{ 
      foreach (string sp in path) 
      { 
       list.Add(new KeyValuePair<string, string>(s, sp)); 
      } 
} 

Aber meine Logik ist fail.What eine richtige Art und Weise ist KeyValue Paar von zwei Array zuweisen.

Erwarteter OutCome.

a-w 
b-x 
c-y 
d-z 

Antwort

1

Sie müssen die gleiche Schleife für beide Arrays (oder die Linq-Lösungen in anderen Antworten vorgeschlagen verwenden):

string[] name = "a,b,c,d".Split(',');//key 
string[] path = "w,x,y,z".Split(',');//value 
List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>(); 

for (int i = 0; i < name.Length, i++) 
{ 
    if (i == path.Length) // incase both arrays are not the same length 
    { 
     break; 
    } 
    list.Add(new KeyValuePair<string, string>(name[i], path[i])); 
} 
0

Wenn Sie sicher sind, dass beide array s gleich lang sind, können Sie tun:

for (var i = 0; i < name.Length; ++i) { 
    list.Add(new KeyValuePair<string, string>(name[i], path[i])); 
} 
0

Sie konnten dieses Linq

var mergedKeyValues = name.Select((n,i) => new KeyValuePair<string,string>(n,path[i])) 
          .ToList(); 

Output

mit tun
[a, w] 
    , 
    [b, x] 
    , 
    [c, y] 
    , 
    [d, z] 

prüfen diese Demo

0

beide Arrays Unter der Annahme von gleicher Länge sein wird, dies zu tun -

for(int i=0; i<name.Length; i++) 
{ 
    list.Add(new KeyValuePair<string, string>(name[i], path[i])); 
} 
0

Was ist mit einer LINQ oneliner?

var d = name.Select((n, idx) => new { Name = n, Index = idx }) 
      .ToDictionary(k => k.Name, v => path[v.Index]); 

Der Schlüssel ist hier den Index aus der Select Methode zu verwenden, um den Index zu bestimmen, die in der anderen Reihe zu verwenden. mit

1

Versuchen:

string[] names = "a,b,c,d".Split(','); //key 
string[] paths = "w,x,y,z".Split(','); //value 

var namesAndPaths = names.Zip(paths, (name, path) => new KeyValuePair<string,string>(name, path)); 
0
string[] name = "a,b,c,d".Split(','); //key 
string[] path = "w,x,y,z".Split(','); //value 
List<KeyValuePair<string, string>> list = new List<KeyValuePair<string, string>>(); 

for (int i = 0; i < name.Length; i++) 
{ 
    for (int j = 0; j < path.Length; j++) 
    { 
     if (i == j) 
     { 
      list.Add(new KeyValuePair<string, string>(name[i], path[j])); 
     } 
    } 
} 
Verwandte Themen