2017-02-23 56 views
0

僅當列表Zlist中的子列表與其他子列表不同時,我想在列表Zlist中添加新的子列表subroute。這裏是Zlist的定義和初始sublists使用HashSet在列表中添加新的不同子列表

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>(); 
    } 
} 

這是我怎麼加我的subrouteZlist

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());