我认为这与docs on using encrypted files here类似,但我无法应用相同的解决方案。
我有一个包含多个列的列表:
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; }
}
我想从此列表中删除重复的行,但仅在特定字段匹配时删除。如果我对整个表格做了不同的处理,这些行将不会被删除。另外,我不关心重复的线条,我只想保留其中一条。
输入:
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具有相同的值,我应该只保留第一个返回(删除第2个,第3个,所有这些字段都匹配。)
有什么想法吗?
答案 0 :(得分:4)
为简单起见,如果InfoForGraph.b
和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()
。
var unique = list.Distinct(new InfoComparer());