2016-10-14 2 views
0

に対して辞書から配列を得る:C#Iのようなデータを持っている他の配列

forループと試み
string[] res = new string[] { "ABC1", "ABC4", "ABC5" }; 

Dictionary<string, string> dic = new Dictionary<string, string>();  
dic.Add("1", "ABC1");  
dic.Add("2", "ABC2");  
dic.Add("3", "ABC3");  
dic.Add("4", "ABC4");  
dic.Add("5", "ABC5");  
dic.Add("6", "ABC6"); 
string[] col = new string[] { "1", "4", "5" }; 

のようなCOL配列と同じ順序で結果の文字列配列を必要しかし、LINQに必要な

string[] res = new string[col.Length]; // { "ABC1", "ABC4", "ABC5" }; 

for(int i=0;i<col.Length;i++) 
{ 
    res[i] = dic[col[i]]; 
} 
+7

ヒント:LINQの選択とてToArrayメソッドは非常にこれを作りますシンプル。 –

+1

LINQタグがありますが、LINQでこれを解決しようとしたという証拠はありませんか? –

答えて

9

危険な方法は、辞書から直接だけにSelectです:

var result = col.Select(c => dic[c]).ToArray(); 

しかし、より多くのキーはこれを試してみてください例外

var result = col.Where(c => dic.Keys.Contains(c)) 
       .Select(c => dic[c]) 
       .ToArray(); 
0

を避けるために、辞書にあることを確認することをお勧めします。

var result = dic.Where(k => col.Contains(k.Key)).Select(v => v.Value).ToArray(); 
+0

string [] col =新しい文字列[] {"1"、 "5"、 "4"}; col配列がこのような場合、結果はまだlke {"ABC1"、 "ABC4"、 "ABC5"}です。しかし、私は{"ABC1"、 "ABC5"、 "ABC4"}を望んでいます。 – chanti

+0

その後@ GiladGreenの答えはそれを行う必要があります。 –

関連する問題