基于Dictionary中的匹配类型和使用C#集合的另一个List更新对象列表

时间:2017-04-16 17:09:40

标签: c# list linq dictionary collections

我有一个下面定义的CustomType对象列表。即List<CustomType>

public class CustomType
{
     public int Id {get;set;}
     public string Value {get;set;}
     public bool IsCorrect {get; set;}
}

现在我有一个Dictionary<int, String>,其中包含一些与自定义类型 ID 字段匹配的键。
我有另一个List<string>,其中包含与词典相同的值。
现在,我想为List<CustomType>List<string>值与词典匹配的条目和相应的更新 IsCorrect = true 字典中的键 CustomType ID 匹配。

我试过以下,
首先,我试图获得List和字典的交叉,如下所示

var commonKeys = list
    .Where(k => dictionaty.ContainsValue(k))
    .Select(k => dictionary)
    .Select(m => m.Keys);

现在普通密钥将包含基于字典中匹配值的公用密钥,现在我需要根据 commonKeys中匹配的密钥更新列表 匹配自定义类型标识

2 个答案:

答案 0 :(得分:1)

您可以这样实现:检索所需的项目,然后迭代它们以设置IsCorrect

Dictionary<int,string> ids;
List<string> values
List<CustomType> customTypes;

foreach(var customType in customTypes.Where(item => ids.ContainsKey(item.Id) && 
                                                    values.Contains(ids[item.Id])))
{
    customType.IsCorrect = true;
}

答案 1 :(得分:1)

Gilad答案的优化方法 - HashSet<string>。使用HashSet.Contains方法,搜索速度与Dictionary的关键一样快 - O(1)

var stringSet = new HashSet<string>(stringValues);
var filtered = customTypes.Where(item => dictionary.ContainsKey(item.Id))
                          .Where(item => stringSet.Contains(dictionary[item.Id]));

foreach (var item in filtered)
{
    item.IsCorrect = true;
}