繁体   English   中英

比较两个列表:一个包含对象,另一个包含字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM