我相信这类似于this https://stackoverflow.com/questions/25324066/distinct-a-list-of-records-based-on-two-column-using-groupby但我无法应用相同的解决方案。
我有一个包含几列的列表:
public struct InfoForGraph
{
public float a{ get; set; }
public double b{ get; set; }
public double c { get; set; }
public double d { get; set; }
public double e { get; set; }
public double f { get; set; }
public double g { get; set; }
public double h { get; set; }
public double i { get; set; }
public double j { get; set; }
}
我想从此列表中删除重复的行,但前提是特定字段匹配。如果我对整个表执行不同操作,这些行将不会被删除。另外,我不在乎重复的台词,我只想保留其中之一。
Input:
2.67|1.84|420|400|1608039|808|3117|1|2|3|4
2.68|1.84|420|401|1608039|808|3269|1|2|3|4
预期输出:
2.67|1.84|420|400|1608039|808|3117|1|2|3|4
因此,如果列 1,2,5,6,8,9,10 具有相同的值,我应该只保留第一个返回(删除所有这些字段都匹配的第二个、第三个。)
有任何想法吗?
为了简单起见,我缩小了你的条件,说两个对象相等,如果InfoForGraph.b
and InfoForGraph.c
是平等的。您明白了并根据需要更改比较器。
public class InfoComparer : IEqualityComparer<InfoForGraph>
{
public bool Equals(InfoForGraph x, InfoForGraph y)
{
if (x.b == y.b && x.c == y.c)
return true;
else
return false;
}
public int GetHashCode(InfoForGraph obj)
{
unchecked
{
int hash = 17;
hash = hash * 23 + obj.b.GetHashCode();
hash = hash * 23 + obj.c.GetHashCode();
return hash;
}
}
}
然后打电话Distinct()
on it.
var unique = list.Distinct(new InfoComparer());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)