从包含具有数组元素的类的列表中删除重复项我有一个包含类中对象的列表。包含各种项目的类,包括int和double数组。这个类看起来像这样。publicclassNewChildren{publicdouble[]fitnessValue{get;set;}publicint[]locationScheme{get;set;}publicdoublecrowdingDistance{get;set;}}由于列表可能包含重复项,我有兴趣删除它们.在网络上,我看到了一些使用Distinct()和GroupBy()方法的基于Linq的解决方案。但是,这些方法似乎不起作用,因为对象中有数组(MSVS2008没有给出任何错误,但也没有删除任何项目)。非常感谢任何建议(包括参考或代码)。提前致谢。您必须问自己的问题是,何时NewChildren的两个实例相同?现在您有了列表,这可能不是一个容易回答的问题。一旦定义,equals方法必须在类中实现:Equals(objectother){//...在此处实施您的平等规则}}现在,为此,您必须始终遵循Microsoft准则。覆盖并不是那么简单,尽管它并不复杂。例如,您将拥有所有具有相同元素的数组:publicbooloverrideEquals(objectother){if(other==null||!(otherisNewChildren)){returnfalse;}varanother=(NewChildren)other;返回AreEquivalent(this.fitnessValue,another.fitnessValue)&&AreEquivalent(this.locationScheme,another.locationScheme)&&AreEquivalent(this.crowdingDistance,another.crowdingDistance);}publicstaticboolAreEquivalent(T[]a,T[]b){returna1.OrderBy(a=>a).SequenceEqual(a2.OrderBy(a=>a));数组相等性的实现取自这里。您可以使用此参考进行优化。如文档中所述,Distinct默认使用默认相等比较器。默认的相等比较器将列表中的每个项目识别为不同于其他项目,因为它检查实例标识。如上述文档所述,为了比较自定义类型并定义你想要的相等性,你需要在你的类上实现一些与比较相关的方法:要比较自定义数据类型,你需要实现[IEquatable]并提供你自己的该类型的GetHashCode和Equals方法。默认情况下,通过检查引用相等性来评估从类创建的对象上的Equals方法和equals运算符。这意味着两个项目只有在引用同一个类实例时才相等。您需要更改查询以检查类中的各个属性,或实现适当方法和运算符的覆盖。请参考MSDN上的以下内容:以上是C#学习教程:从包含带有数组元素的类的列表中删除重复项分享全部内容,如果对大家有用需要进一步了解C#学习教程,希望各位多多关注~本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
