2012-01-06 26 views
0

キーが指定された値であるディクショナリ値からリストを作成できるかどうかは疑問でしたか?辞書は、この希望辞書を作成する<string>辞書<string、string>

: - DPC1 Sidcupの - DPC2 ブラックヒース - DPC3 ブラックヒース - DPC4 ベックス -

Sidcupの事実DPC5

を、私は完全に上記のように辞書を実装していませんよ良い考えです。ここではその実装です:

DataSet ds = EngineBllUtility.GetDPCsForImportFile(connectionString, fileID); 
if (ds.Tables.Count > 0) 
{ 
    DataTable dtDPCs = EngineBllUtility.GetDPCsForImportFile(connectionString, fileID).Tables[0]; 
    Dictionary<string, string> preliminaryList = new Dictionary<string, string>(); 

    if (dtDPCs.Columns.Contains("DPCNumber") && dtDPCs.Columns.Contains("BranchName")) 
     foreach (DataRow dataRow in dtDPCs.Rows) 
     { 
      preliminaryList.Add(dataRow["BranchName"].ToString(), dataRow["DPCNumber"].ToString()); 
     } 

私は、次のコードを持っている:(、最後の行すみませんそのちょうどので、あなたは私がやろうとしているかのアイデアを持っています)。

foreach (string branch in branchNames) 
{ 
    string subfolder = System.IO.Path.Combine(saveLocation, branch); 
    System.IO.Directory.CreateDirectory(subfolder); 

    List<string> certificateList = new List<string>(); 

    certificateList.Add(DPCNumber in preliminaryList where Key = branch); 
} 

上記のブランチはディクショナリのキーです。私はそれが新しいフォルダを作成し、私が作成している証明書リストで何かをする必要があるので、私は繰り返す必要があります。

+1

辞書にはキーごとに1つの値しかありません。リストからそのリストを作成する理由は何ですか? –

+0

ループのすべての繰り返しとブロック内で 'certificateList'を初期化しています。ループ外では使用できません。それはあなたが望んだことですか? – Oded

+0

@Oded質問の最後まで読んだら、 – ediblecode

答えて

0

確かだろう。もちろん

private static void TestZip() 
    { 
     Dictionary<string, string> stringstringdic = new Dictionary<string, string>(); 
     stringstringdic.Add("1", "One"); 
     stringstringdic.Add("2", "Two"); 
     stringstringdic.Add("3", "Three"); 
     stringstringdic.Add("4", "Four"); 
     stringstringdic = stringstringdic.Where(pair => pair.Key != "1") 
             .ToDictionary(pair => pair.Key, pair => pair.Value); 
     List<string> stringlist = stringstringdic.Keys.Concat(stringstringdic.Values).ToList(); 
     foreach (string str in stringlist) 
     { 
      Console.WriteLine(str); 
     } 
    } 

//Output:  
//2 
//3 
//4 
//Two 
//Three 
//Four 

、あなたはあなたの本当のニーズを反映させるためにWhere句を変更する必要があります。
私はあなたのことを正しく理解していれば、それはそうです.Where(pair => pair.Key == branch)

0

あなたが正しく理解していれば、キーに基づく値を別のリストに追加したいですか?

certificateList.Add(preliminaryList[branch]) 

私は本当にDPCNumberはそれのすべてにどのように適合するかを知るためにpreliminaryListの宣言を確認する必要があるとして、これは簡略化されています。それは...

certificateList.Add(preliminaryList[branch].ToString()) 
-1

単純にキーのリストを作成するには、以下を行うことができます。

var dictionary = new Dictionary<string, string>(); 
dictionary.Add("key1", "value1"); 
dictionary.Add("key2", "value2"); 
dictionary.Add("key3", "value3"); 
dictionary.Add("key4", "value4"); 
dictionary.Add("key5", "value5"); 

var list = dictionary.Keys.ToList(); 

これは、あなたの値 "キー1"、 "KEY2"、 "KEY3"、 "KEY4"、 "KEY5" とのリストを与える必要があります。

where句を入力すると、特定のキーを除外できます。以下は、 "2"(ランダムな例)を含むすべてのキーを与え、その結果は単に "key2"になります。

var filteredList = dictionary.Keys.Where(key => key.Contains("2")).ToList(); 

編集: 特定のキーを指定して値を取得します。

string value = dictionary["key1"]; 

注意、鍵が与えられたキーのためにあなたがしか戻ってない値のリストを単一の値を取得しますので、辞書は、一意である必要があります。

+0

「キー」が指定された文字列である 'values'のリストを生成したい – ediblecode

+0

[MSDN](http://msdn.microsoft.com/en-us/library/xfhwa508.aspx)によると、 "Dictionary のすべてのキーは、辞書の等価比較子に応じて一意でなければなりません"ので、指定されたキーに対して1つの値しか得られません。この変更を質問に反映させるために私の回答を更新します。 – Mark

関連する問題