C# 如何比较两个结构列表?
我有一个小结构,我必须比较这些值,找出哪些值具有相同的FreeFlow文本,然后获取该结构枚举C# 如何比较两个结构列表?,c#,winforms,struct,C#,Winforms,Struct,我有一个小结构,我必须比较这些值,找出哪些值具有相同的FreeFlow文本,然后获取该结构枚举 public struct Holder { public string FreeFlow; public int ENumber; } 下面是我如何添加它们的 foreach(Class1.TextElement re in Class1._TextElements) { //create
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文本是否与其他struct freeflow文本完全相同您所说的“比较”是什么意思?这可能意味着很多事情。您想知道这两个集合共有哪些项吗?你想知道哪些项目是不同的吗
不管你的意思是什么,林克都可能有答案。Union、Except等。如果您使用的是C#3.0或更高版本,请尝试SequenceEqual方法
Class1._TextElements.SequenceEqual(Class1._TextElements2);
这将对集合中的元素运行相等性检查。如果序列长度不同,或者同一位置的任何元素不相等,则返回false。如果我的解释正确,则您希望找到lstHolder和lstHolder2中的元素,这是交点。如果我的解释正确,那么有两步解决方案:首先,在Holder结构上重写Equals()。然后使用LINQ intersect运算符:
var result = lstHolder.Intersect(lstHolder2);
我必须比较这些值才能找到
哪些具有相同的自由流
文本,然后抓取该结构
伯爵
如果可以使用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
可能不同,否则基于此确定等价性是有意义的。如果是这种情况,那么上面的连接
查询应该是您所需要的。首先,您应该将其设置为类而不是结构。正确地实现一个结构比正确地实现一个类要复杂得多。我想知道集合之间的freeflow文本是相同的,然后获取每个结构的两个数字