1

我有一个 Generic.Collection.List 和 Generic.Collection.Dictionary 之类的

List<String> MyList
Dictionary<String, List<String>> MyDictionary

我需要MyDictionary根据MyListieMyListvalueMyDictionary整数MyFilteredDictionary过滤

Dictionary<String, List<String>> MyFilteredDictionary

现在我通过使用`for-foreach循环来做到这一点,比如

for (int l_nIndex = 0; l_nIndex < MyList.Count; l_nIndex++)
  {
    foreach (KeyValuePair<String, List<String>> l_objKeyValuePair in MyDictionary)
      {
         if (l_objKeyValuePair.Value.Contains(MyList[l_nIndex]) == true)
           {
             MyFilteredDictionary.Add(l_objKeyValuePair.Key, l_objKeyValuePair.Value);
             break;
            }
       }
  }

如何使用 `Lambda 表达式做同样的事情?

4

2 回答 2

6
var res = MyDictionary.Where(kvp => MyList.Any(item => kvp.Value.Contains(item)))
                      .ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
于 2012-08-02T11:00:21.603 回答
0

我不完全确定你想要什么,但这将根据另一个字典中的项目创建一个过滤的项目字典,该字典在列表中有键......

    MyFilteredDictionary = MyList
        .Where(MyDictionary.ContainsKey)
        .ToDictionary(item => item, item => MyDictionary[item]);
于 2012-08-02T10:52:41.407 回答