从Dictionary <string,string =“”> </string,> </string>创建List <string>

时间:2012-01-06 10:02:21

标签: c# .net list dictionary

我想知道是否可以从字典值中创建一个列表,其中键是指定值?

字典会这样:

Sidcup - DPC1 Sidcup - DPC2 布莱克希思 - DPC3 布莱克希思 - DPC4 Bexleyheath - 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);
}

在上面,分支是Dictionary中的键。我需要迭代,因为它需要创建一个新文件夹,然后使用我正在创建的certificateList做一些事情。

3 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望将基于密钥的值添加到单独的列表中吗?

certificateList.Add(preliminaryList[branch])

这是简化的,因为我真的需要看看initialList的声明,以了解DPCNumber如何适应所有这些。可能是......

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

答案 1 :(得分: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)

答案 2 :(得分:-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”(随机示例)的所有键,结果只是“key2”。

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

编辑: 获得给定特定密钥的值。

string value = dictionary["key1"];

注意,键是字典必须是唯一的,因此对于给定的键,您将只返回单个值而不是值列表。