2012-01-06 101 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

相关问题