首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#从List<KeyValuePair<string,string>获得键和值

C#从List<KeyValuePair<string,string>获得键和值
EN

Stack Overflow用户
提问于 2015-07-14 18:24:36
回答 7查看 115.5K关注 0票数 19

列出了一份清单:

代码语言:javascript
运行
复制
    private List<KeyValuePair<string, string>> KV_List = new List<KeyValuePair<string, string>>();
    void initList()
    {
        KV_List.Add(new KeyValuePair<string, string>("qwer", "asdf"));
        KV_List.Add(new KeyValuePair<string, string>("qwer", "ghjk"));
        KV_List.Add(new KeyValuePair<string, string>("zxcv", "asdf"));
        KV_List.Add(new KeyValuePair<string, string>("hjkl", "uiop"));
    }

(注意:键"qwer“有多个值,值”asdf“有多个键。)

1)是否有更好的方法来返回所有键的列表,而不仅仅是在KeyValuePair列表上做一个预测?

2)类似地,是否有更好的方法来返回给定键的所有值的列表,而不是使用foreach?

3)然后,返回给定值的键列表如何?

谢谢..。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2015-07-14 18:31:24

代码语言:javascript
运行
复制
// #1: get all keys (remove Distinct() if you don't want it)
List<string> allKeys = (from kvp in KV_List select kvp.Key).Distinct().ToList();
// allKeys = { "qwer", "zxcv", "hjkl" }

// #2: get values for a key
string key = "qwer";
List<string> values = (from kvp in KV_List where kvp.Key == key select kvp.Value).ToList();
// values = { "asdf", "ghjk" }

// #3: get keys for a value
string value = "asdf";
List<string> keys = (from kvp in KV_List where kvp.Value == value select kvp.Key).ToList();
// keys = { "qwer", "zxcv" }
票数 32
EN

Stack Overflow用户

发布于 2015-07-14 18:31:37

听起来你会从使用这样的东西中受益:

代码语言:javascript
运行
复制
Dictionary<string, List<string>> kvlist;

kvlist["qwer"] = new List<string>();
kvlist["qwer"].Add("value1");
kvlist["qwer"].Add("value2");

foreach(var value in kvlist["qwer"]) {
    // do something
}

使用字典和列表创建基本的mutli值字典类相对容易。

博客帖子更多地介绍了微软通过NuGet提供的MultiDictionary类型。

票数 6
EN

Stack Overflow用户

发布于 2015-07-14 18:32:22

您可以从NameValueCollection命名空间中使用System.Collection.Specialized:

代码语言:javascript
运行
复制
NameValueCollection  KV_List = new NameValueCollection();

KV_List.Add("qwer", "asdf");
KV_List.Add("qwer", "ghjk");
KV_List.Add("zxcv", "asdf");
KV_List.Add("hjkl", "uiop");

使用实例:

代码语言:javascript
运行
复制
string singleValue = KV_List["zxcv"];  // returns "asdf"
string[] values = KV_List.GetValues("qwer");  // returns "asdf, "ghjk"
string[] allKeys = KV_List.AllKeys;
string[] allValues = KV_List.AllKeys;

https://msdn.microsoft.com/en-us/library/system.collections.specialized.namevaluecollection%28v=vs.110%29.aspx

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

https://stackoverflow.com/questions/31414429

复制
相关文章

相似问题

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