我正在尝试比较两个列表以添加(在另一个列表中)我想要的灯。 我想通过字符串名称
获得轻质物体目前,我正在使用double 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);
}
}
}
谢谢您的帮助。
答案 0 :(得分:1)
使用位置和包含(效率不高)。
List<Light> lightsIWant = (await this.bridgeManager.GetLights())
.Where(l => lightsWanted.Contains(l.Name))
.ToList();
使用联接(效率更高)
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,我只是更喜欢对此类简单内容使用查询语法。
答案 1 :(得分:1)
您可以为此目的使用加入
UISettings settingsManager = UISettings.getInstance();
UISettingsState settings = settingsManager.getState();
settingsManager.setFontSize(settingsManager.getFontSize() + 1);
if (!settings.getOverrideLafFonts()) {
settings.setOverrideLafFonts(true);
}
LafManager.getInstance().updateUI();
答案 2 :(得分:1)
这应该做到:
List<Light> lightsIwant = (from l in lights
join lw in lightsWanted on l.Name equals lw
select l).ToList();