首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Dictionary<string制作List<string>,string>

从Dictionary<string制作List<string>,string>
EN

Stack Overflow用户
提问于 2012-01-06 18:02:21
回答 3查看 642关注 0票数 0

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

字典是这样的:

Sidcup - DPC1 Sidcup - DPC2 Blackheath - DPC3 Blackheath - DPC4 Bexleyheath - DPC5

事实上,我并不是完全像上面那样实现一个字典是个好主意。下面是它的实现:

代码语言:javascript
运行
复制
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());
       }

我有以下代码:(请原谅最后一行,这只是为了让你知道我想要做什么)。

代码语言:javascript
运行
复制
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执行一些操作。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-06 18:28:46

当然:

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2012-01-06 18:08:01

如果我理解正确的话,您想将基于键的值添加到单独的列表中吗?

代码语言:javascript
运行
复制
certificateList.Add(preliminaryList[branch])

这被简化了,因为我真的需要看到preliminaryList的声明,才能知道DPCNumber是如何融入其中的。是不是..。

代码语言:javascript
运行
复制
certificateList.Add(preliminaryList[branch].ToString())
票数 0
EN

Stack Overflow用户

发布于 2012-01-06 19:13:46

要简单地创建键列表,您可以执行以下操作。

代码语言:javascript
运行
复制
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”。

代码语言:javascript
运行
复制
var filteredList = dictionary.Keys.Where(key => key.Contains("2")).ToList();

编辑:获取给定特定键的值。

代码语言:javascript
运行
复制
string value = dictionary["key1"];

注意,键是一个字典必须是唯一的,所以对于一个给定的键,你只能得到一个值,而不是一个值列表。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8756111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档