我有一个下面定义的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中匹配的密钥更新列表 匹配自定义类型的标识。
答案 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;
}