[英]How to compare two struct lists?
我有一个小结构,我必须比较这些值以找出哪些具有相同的 FreeFlow 文本,然后获取该结构 ENumber。
public struct Holder
{
public string FreeFlow;
public int ENumber;
}
这是我添加它们的方法
foreach(Class1.TextElement re in Class1._TextElements)
{
//create struct with all details will be good for later
Holder ph = new Holder();
ph.FreeFlow = re.FreeFlow;
ph.ENumber = re.ENumber;
lstHolder.Add(ph);
}
foreach(Class1.TextElement2 re in Class1._TextElements2)
{
//create struct with all details will be good for later
Holder phi = new Holder();
phi.FreeFlow = re.FreeFlow;
phi.ENumber = re.ENumber;
lstHolder2.Add(phi);
}
我可以在 foreach 中使用 foreach 进行比较,但我认为这不是最有效的方法。 有什么帮助吗?
编辑:我试图确定自由流文本是否与其他结构自由流文本完全相同
我必须比较这些值以找出哪些值具有相同的 FreeFlow 文本,然后获取该结构 ENumber。
如果您可以使用 LINQ,您可以加入具有相同FreeFlow
文本的项目,然后选择两个项目的ENumber
值:
var query = from x in Class1._TextElements
join y in Class1._TextElements2 on x.FreeFlow equals y.FreeFlow
select new { xId = x.ENumber, yId = y.ENumber };
foreach (var item in query)
{
Console.WriteLine("{0} : {1}", item.xId, item.yId);
}
编辑:我的理解是FreeFlow
文本是公共成员,并且ENumber
可能不同,否则基于此确定等效性是有意义的。 如果是这种情况,上面的join
查询应该就是您所需要的。
如果我正确地解释你,你想找到在两种lstHolder和lstHolder2的元素-这是交集。 如果我的解释正确,那么 2 步解决方案:首先,覆盖 Holder 结构上的 Equals()。 然后使用 LINQ 相交运算符:
var result = lstHolder.Intersect(lstHolder2);
你说的“比较”是什么意思? 这可能意味着很多事情。 你想知道哪些项目是两套共同的吗? 您想知道哪些项目不同吗?
无论您的意思是什么,LINQ 都可能有答案。 联合、除外等
如果您使用的是 C# 3.0 或更高版本,请尝试 SequenceEqual 方法
Class1._TextElements.SequenceEqual(Class1._TextElements2);
这将对集合中的元素运行相等性检查。 如果序列长度不同或同一位置的任何元素不相等,则返回 false。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.