gpt4 book ai didi

c# - 让 SequenceEqual 为列表工作

转载 作者:太空狗 更新时间:2023-10-29 22:15:24 28 4
gpt4 key购买 nike

我有一个名为 Country 的类。它有公共(public)成员“CountryName”和“States”。

我已经声明了一份国家名单。

现在我想编写一个函数,它接受一个新的“国家”并确定 CountryList 是否已经有“国家”。

我试过写一个像这样的函数

bool CheckCountry(Country c)
{
return CountryList.Exists(p => p.CountryName == c.Name
&& p.States.SequenceEqual(c.States));
}

因为我想使用各州的 CountryName 属性比较各州,所以我想修改我的函数,以便 SequenceEqual 基于各州的 CountryName 工作?

最佳答案

将其分解为许多简单的查询,然后将这些查询重新组合在一起。

让我们开始制作一系列按名称匹配的项目:

var nameMatches = from item in itemList where item.Name == p.Name select item;

我们需要将这些项目与 p 的子项目中的名称序列进行比较。那是什么顺序? 编写查询:

var pnames = from subitem in p.SubItems select subitem.Name;

现在您想要从 nameMatches 中查找名称序列匹配的所有元素。你将如何获得名字的顺序?好吧,我们刚刚看到了如何使用 pnames 做到这一点,所以做同样的事情:

var matches = from item in nameMatches
let subitemNames =
(from subitem in item.SubItems select subitem.Name)
where pnames.SequenceEqual(subitemNames)
select item;

现在您想知道,是否有匹配项?

return matches.Any();

这应该可以正常工作。但是如果你想成为真正的爱好者,你可以在一个大查询中写下整个事情!

return (
from item in itemList
let pnames =
(from psubitem in p.SubItems select psubitem.Name)
let subitemNames =
(from subitem in item.SubItems select subitem.Name)
where item.Name == p.Name
where pnames.SequenceEqual(subitemNames)
select item).Any();

你就完成了。非常简单!请记住,将其分解成小步骤,单独解决每个问题,然后将解决方案从小结果中组合出来。

关于c# - 让 SequenceEqual 为列表工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/999360/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com