2012-01-06 102 views
0

製作清單 我想知道是否有可能從字典值列出關鍵字是指定值的列表? 從字典<字符串,字符串>

詞典將是這樣的:

Sidcup - DPC1 Sidcup - DPC 2 布萊克希思 - DPC3 布萊克希思 - DPC4 博克斯雷 - 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); 
} 

在上面的分支是詞典的關鍵。我需要迭代,因爲它需要創建一個新文件夾,然後對我創建的certificateList進行一些操作。

+1

你的字典中每個鍵只有一個值,爲什麼你想從中創建一個列表? – 2012-01-06 10:05:50

+0

您正在循環的每次迭代中以及塊內初始化'certificateList'。它不能在循環之外使用。那是你想要的嗎? – Oded 2012-01-06 10:27:43

+0

@Oded是的,這是所希望的,如果你讀到問題的結尾,你會看到 – ediblecode 2012-01-06 11:07:18

回答

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

如果我正確理解你,你想添加一個基於密鑰的值到一個單獨的List?

certificateList.Add(preliminaryList[branch]) 

,因爲我真的需要看到preliminaryList申報知道如何DPCNumber適合所有的呢?這是簡化。難道是......

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(); 

這應該給你值 「KEY1」, 「KEY2」, 「KEY3」, 「KEY4」, 「KEY5」 名單。

您可以放入一個where子句來過濾掉某些鍵。以下給出包含「2」(隨機示例)的所有鍵,導致僅「鍵2」。

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

編輯: 爲給定特定鍵的值。

string value = dictionary["key1"]; 

注意,關鍵是一個字典必須是唯一的,所以對於一個給定的鍵,你會永遠只能得到一個單一的值返回,而不是值的列表。

+0

我想根據[MSDN](http://msdn.microsoft.com/en-us/library/xfhwa508.aspx)生成'values'列表,其中'key'是指定的字符串 – ediblecode 2012-01-06 11:14:45

+0

「Dictionary 中的每個關鍵字必須根據字典的相等比較器是唯一的」,因此您只能獲得給定關鍵字的一個值。我會更新我的答案以反映這個問題的變化。 – Mark 2012-01-06 11:22:47

相關問題