[英]How to Compare two Generic List one contain int and another contain class object
[英]Compare two lists : One contain object, one other contain string
我正在尝试比较两个列表以添加(在另一个列表中)我想要的灯。 我想通过字符串名称获取轻对象
目前,我正在使用双 foreach,但我知道 LinQ 可以实现,但我不知道如何...
private readonly string[] lightsWanted = { "MyLight1", "MyLight2" };
---
var lights = await this.bridgeManager.GetLights();
foreach (Light light in lights)
{
foreach (string lightWanted in this.lightsWanted)
{
if (light.Name == lightWanted)
{
this.selectedLights.Add(light);
}
}
}
感谢您的帮助。
使用 Where 和 Contains (效率不高)。
List<Light> lightsIWant = (await this.bridgeManager.GetLights())
.Where(l => lightsWanted.Contains(l.Name))
.ToList();
使用 Join(更高效)
var allLights = await this.bridgeManager.GetLights();
IEnumerable<Light> lightsIWant = from allLight in allLights
join desiredLightName in lightsWanted
on allLight.Name equals desiredLightName
select allLight;
您也可以使用扩展方法进行连接,我只是更喜欢使用查询语法来处理这样的简单内容。
您可以为此目的使用 Join
var selectedList = lights.Join(lightsWanted,x=>x.Name,y=>y,(x,y)=>x);
这应该这样做:
List<Light> lightsIwant = (from l in lights
join lw in lightsWanted on l.Name equals lw
select l).ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.