仅当子列表与列表subroute
中的其他子列表不同时,我才想在列表Zlist
中添加新的子列表Zlist
。以下是Zlist
和初始sublists
的定义:
HashSet<Matrix> Zlist = new HashSet<Matrix>();
for (int m = 0; m < M; m++)
{
for (int i = 1; i < C + 1; i++)
{
Zlist.Add(new Matrix() {Column = {m,i}});
}
}
这里是<Matrix>
:
class Matrix
{
public List<int> Column { get; set; }
public Matrix()
{
Column = new List<int>();
}
}
这就是我将subroute
添加到Zlist
的方式:
foreach (var subroute in route)
Zlist.Add(new Matrix() { Column = subroute});
就我而言,另一个名为route
的列表包含2个subroute
。其中只有一个是新的。但根据我的代码,Zlist
仍会添加所有subroute
。我已经把HashSet放了但是没用。请帮助,谢谢
答案 0 :(得分:0)
你必须告诉HashMap如何进行比较,因为它们是引用类型。
public class MatrixComparer : IEqualityComparer<Matrix>
{
public bool Equals(Matrix x, Matrix y)
{
if (x.Column.Count != y.Column.Count) return false;
return !x.Column.Where((t, i) => t != y.Column[i]).Any();
}
public int GetHashCode(Matrix obj)
{
return obj.Column.Aggregate((i1, i2) => i1 ^ i2);
}
}
并在HashMap中发送:
HashSet<Matrix> Zlist = new HashSet<Matrix>(new MatrixComparer() );