我试图更新对象列表中的所有重复项,如果它们存在于另一个集合中.
这是我的代码:
public class Cars
{
public string brand { get; set; }
public string model { get; set; }
public string allowed { get; set; }
}
var notAllowedModels = GetNotAllowedModels(); // returns a List<String> with model names
foreach(var car in cars) // cars is a List<Car>
{
if (notAllowedModels.Contains(car.model))
cars[cars.FindIndex(x => x.model == car.model)].allowed = "No";
else
cars[cars.FindIndex(x => x.model == car.model)].allowed = "Yes";
}
Run Code Online (Sandbox Code Playgroud)
如果列表中的模型是唯一的,那么它可以正常工作,但如果它们存在多次,那么只会更新第一个,而其他的将为空.
任何人都可以想到一种方法来更新notAllowedModels列表中存在的所有重复项吗?
我知道我可以使用FindAll而不是FindIndex但它返回一个列表,我不确定它是如何帮助我的,因为它将与重复的问题相同.
你不需要List.FindIndex用来找到汽车,你已经拥有它:
foreach(Car car in cars) // cars is a List<Car>
{
if (notAllowedModels.Contains(car.model))
car.allowed = "No";
else
car.allowed = "Yes";
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,如果你想提高业绩回报HashSet<string>的GetNotAllowedModels.它只包含唯一值,并且在lookups(Contains)中非常有效.