/// <summary> /// Gets the hash code for this instance. /// </summary> /// <returns> /// The hash code for this instance. /// </returns> public override int GetHashCode() { return(HashCodeCalculator.Calculate( this.PrimaryKey.GetNullAwareHashCode(), this.SecondaryKey.GetNullAwareHashCode())); }
internal static PatternDataResults GetPatternDataFromGrid <T>(ValuesManager <T> valuesManager, int patternSize, bool equalWeights) { Dictionary <string, PatternData> patternHashCodeDictionary = new Dictionary <string, PatternData>(); Dictionary <int, PatternData> patternIndexDictionary = new Dictionary <int, PatternData>(); Vector2 sizeOfGrid = valuesManager.GetGridSize(); int patternGridSizeX = 0, patternGridSizeY = 0; int rowMin = -1, colMin = -1, rowMax = -1, colMax = -1; if (patternSize < 3) { patternGridSizeX = (int)sizeOfGrid.x + 3 - patternSize; patternGridSizeY = (int)sizeOfGrid.y + 3 - patternSize; rowMax = patternGridSizeY - 1; colMax = patternGridSizeX - 1; } else { patternGridSizeX = (int)sizeOfGrid.x + patternSize - 1; patternGridSizeY = (int)sizeOfGrid.y + patternSize - 1; rowMin = 1 - patternSize; colMin = 1 - patternSize; rowMax = (int)sizeOfGrid.y; colMax = (int)sizeOfGrid.x; } int[][] patternIndicesGrid = MyCollectionExtension.CreateJaggedArray <int[][]>(patternGridSizeY, patternGridSizeX); int totalFrequency = 0, patternIndex = 0; for (int row = rowMin; row < rowMax; row++) { for (int col = colMin; col < colMax; col++) { int[][] gridValues = valuesManager.GetPatternValuesFromGridAt(col, row, patternSize); string hashValue = HashCodeCalculator.CalculateHashCode(gridValues); if (patternHashCodeDictionary.ContainsKey(hashValue) == false) { Pattern pattern = new Pattern(gridValues, hashValue, patternIndex); patternIndex++; AddNewPattern(patternHashCodeDictionary, patternIndexDictionary, hashValue, pattern); } else { if (equalWeights == false) { patternIndexDictionary[patternHashCodeDictionary[hashValue].Pattern.Index].AddToFrequency(); } } totalFrequency++; if (patternSize < 3) { patternIndicesGrid[row + 1][col + 1] = patternHashCodeDictionary[hashValue].Pattern.Index; } else { patternIndicesGrid[row + patternSize - 1][col + patternSize - 1] = patternHashCodeDictionary[hashValue].Pattern.Index; } } } CalculateRelativeFrequency(patternIndexDictionary, totalFrequency); return(new PatternDataResults(patternIndicesGrid, patternIndexDictionary)); }