我有一個包含幾何形狀(通常是(多)行)的集合的幾何形狀。現在我想爲這些幾何實現一個HashCode,以便將它們放入集合中。爲此,我在每個幾何體中都有三個成員不會更改,因此適用於HashCode:幾何體類型(對於所有幾何體,起點和終點,PolyLine)的哈希碼,只有不同對他們的方向
所以我寫了這個代碼
int hash = 17;
// this hascode-implementation uses the geometry-type and the from- and toPoints of the geometry
hash = hash * 31 + this.Geometry.GeometryType.GetHashCode();
hash = hash * 31 + this.Geometry.FromPoint.X.GetHashCode();
hash = hash * 31 + this.Geometry.FromPoint.Y.GetHashCode();
hash = hash * 31 + this.Geometry.ToPoint.X.GetHashCode();
hash = hash * 31 + this.Geometry.ToPoint.Y.GetHashCode();
現在我們有這使得它無法給我寫一個哈希函數我們的應用程序中的另一個前提條件:兩個幾何圖形也被認爲是相等的時候都相反。由於每個實際的平等對象必須具有相同的hashCode,我必須更改實現,以便允許對角線衝突。
這意味着以下內容:
當幾何1的fromPoint從幾何2(反之亦然)等於尖山也其散列碼必須相等。
哪我有我的執行來改變,使斜碰撞或我完全whrong我的執行的因素/有沒有更好的方式來做到這一點)?
葉氏,就是這樣,簡單的數學,並感謝您的編輯建議:d – HimBromBeere