C# 在C中生成两个列表项的集合差
我有两份清单。我需要收集不再使用的数据 比如说 清单1: 1. 2. 3. 4. 5. 清单2: 1. 2. 4. 5. 6. 需要创建结果数据集 清单2未包括的项目: 3. 我希望使用以下内容:C# 在C中生成两个列表项的集合差,c#,sorting,lambda,C#,Sorting,Lambda,我有两份清单。我需要收集不再使用的数据 比如说 清单1: 1. 2. 3. 4. 5. 清单2: 1. 2. 4. 5. 6. 需要创建结果数据集 清单2未包括的项目: 3. 我希望使用以下内容: var itemsNotInList2 = List2.Except(List1).ToList(); 在本例中,您处理的是列表,然后您有了正确的想法,只是args颠倒了。应该是, var itemsNotInList2 = List1.Except(List2).ToList(); 想一想如何用
var itemsNotInList2 = List2.Except(List1).ToList();
在本例中,您处理的是列表,然后您有了正确的想法,只是args颠倒了。应该是,
var itemsNotInList2 = List1.Except(List2).ToList();
想一想如何用通俗易懂的英语表达这一点。要获取列表2中的项目,我想获取列表1中的所有内容,除了列表2中的内容。问题中的代码为您提供了列表2中的项目,但列表1中没有这些项目,因为列表2是列表1的子集
请注意,这种方法通常不适用于参考类型,因为默认的comaparer将自己比较参考。为了对对象执行类似的操作,您必须实现IEqualityComparer并调用重载,重载接受它作为第三个参数。例如,如果您正在处理一个列表,并且Person有一个公共字符串Ssid,则可以使用return p1.Ssid==p2.Ssid定义Equal,并将其用作比较的基础。如果您需要,可以在msdn上找到这方面的示例
public class Person
{
public string Ssid;
// other properties and methods
}
public class PersonSsidEqualityComparer : IEqualityComparer<Person>
{
public bool Equal(Person lhs, Person rhs)
{
return lhs.Ssid == rhs.Ssid
}
public int GetHashCode(Person p)
{
return p.Value.GetHashCode();
}
}
在本例中,您处理的是列表,然后您有了正确的想法,只是args颠倒了。应该是,
var itemsNotInList2 = List1.Except(List2).ToList();
想一想如何用通俗易懂的英语表达这一点。要获取列表2中的项目,我想获取列表1中的所有内容,除了列表2中的内容。问题中的代码为您提供了列表2中的项目,但列表1中没有这些项目,因为列表2是列表1的子集
请注意,这种方法通常不适用于参考类型,因为默认的comaparer将自己比较参考。为了对对象执行类似的操作,您必须实现IEqualityComparer并调用重载,重载接受它作为第三个参数。例如,如果您正在处理一个列表,并且Person有一个公共字符串Ssid,则可以使用return p1.Ssid==p2.Ssid定义Equal,并将其用作比较的基础。如果您需要,可以在msdn上找到这方面的示例
public class Person
{
public string Ssid;
// other properties and methods
}
public class PersonSsidEqualityComparer : IEqualityComparer<Person>
{
public bool Equal(Person lhs, Person rhs)
{
return lhs.Ssid == rhs.Ssid
}
public int GetHashCode(Person p)
{
return p.Value.GetHashCode();
}
}
试试这个
var itemsNotInList2 = List1.Except(List2).ToList();
试试这个
var itemsNotInList2 = List1.Except(List2).ToList();
如果要比较对象,可能需要提供自己的 例如:
public class YourClass
{
public int Value;
}
public class YourClassEqualityComparer : IEqualityComparer<YourClass>
{
public bool Equals(YourClass x, YourClass y)
{
return x.Value == y.Value;
}
public int GetHashCode(YourClass obj)
{
return obj.Value.GetHashCode();
}
}
如果要比较对象,可能需要提供自己的 例如:
public class YourClass
{
public int Value;
}
public class YourClassEqualityComparer : IEqualityComparer<YourClass>
{
public bool Equals(YourClass x, YourClass y)
{
return x.Value == y.Value;
}
public int GetHashCode(YourClass obj)
{
return obj.Value.GetHashCode();
}
}
将其反转:var itemsNotInList2=List1.ExceptList2.ToList;对于任何想看到IEqualityComparer示例和对其的精彩解释的人。将其反转:var itemsNotInList2=List1.ExceptList2.ToList;对于任何想看到IEqualityComparer示例和对其的精彩解释的人。我明白了,我实际上是在使用对象,你能给我指一个msdn上的例子或给我看一个概念证明吗?@Bradylies我更新了一个使用对象并实现IEqualityComparar的例子。请注意,您可以在不实现IEqualityComparar的情况下组合其他一些LINQ操作符来获得相同的结果,只需使用Exception即可。哇,您真的全力以赴了。非常感谢你的帮助!!!我也明白为什么这也是必要的。我明白了,我实际上是在使用对象,你能给我指一个msdn上的例子或给我看一个概念证明吗?@Bradylies我更新了一个使用对象并实现IEqualityComparar的例子。请注意,您可以在不实现IEqualityComparar的情况下组合其他一些LINQ操作符来获得相同的结果,只需使用Exception即可。哇,您真的全力以赴了。非常感谢你的帮助!!!我也完全理解为什么这也是必要的。