从列表中的字典中获取值

时间:2016-05-24 11:10:35

标签: c# list dictionary c#-4.0 lambda

我有一个列表,

List<string> list = new List<string>();
list.Add("MEASUREMENT");
list.Add("TEST");

我有一本字典,

Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("BPGA", "TEST");
dict.Add("PPPP", "TEST");
dict.Add("RM_1000", "MEASUREMENT");
dict.Add("RM_2000", "MEASUREMENT");
dict.Add("CDMA", "TEST");
dict.Add("X100", "XXX");

现在,我想根据列表从字典中获取所有匹配的数据。 意味着,列表中的所有数据都与dict值匹配,然后获得具有以下数学值的新词典

有没有办法通过使用lambda表达式来实现这个目的?

我想要这样的结果。

 Key     Value
"BPGA",    "TEST"
"PPPP",    "TEST"
"RM_1000", "MEASUREMENT"
"RM_2000", "MEASUREMENT"
"CDMA",    "TEST"

提前致谢!

1 个答案:

答案 0 :(得分:0)

您应该使用类似的字典,例如具有多个值的公用密钥,例如:

Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>();

然后在添加值时需要做的就是:

dict.Add("TEST", new List<string>() { /*strings go in here*/ });

然后从密钥中获取所有结果,如:

List<string> testValues = dict["TEST"];

为了确保安全,你应该检查密钥是否存在,即

if (dict.ContainsKey("TEST"))
{
    //Get the values
}

然后,要将值添加到当前键,您可以执行以下操作:

dict["TEST"].Add("NewValue");

如果你坚持保持相同的结构,虽然我不推荐它,如下所示:

List<string> testKeys = new List<string>();
foreach (var pairs in dict)
{
    if (pair.Value == "TEST")
    {
        testKeys.Add(pair.Key);
    }
}

甚至以下LINQ语句:

List<string> testKeys = dict.Where(p => p.Value == "TEST").Select(p => p.Key).ToList();

要查找列表中的通用查询,请使用:

List<string> values = dict.Where(p => list.Contains(p.Value)).ToList();