/// <summary> /// Sorts rows of given array. /// </summary> /// <param name="array">Sourse array.</param> /// <param name="comparer">Row comparer.</param> /// <param name="ascending">Sorting order. Ascending by default.</param> public static void SortRows(int[,] array, IRowComparer comparer, bool ascending = true) { int length = array.GetLength(0); if (length == 0) { throw new ArgumentOutOfRangeException("Array is empty"); } if (comparer == null) { throw new ArgumentNullException(nameof(comparer)); } for (int i = 0; i < length - 1; i++) { for (int j = 0; j < length - i - 1; j++) { if (comparer.CompareRows(array, j, j + 1) == ascending) { array.SwapRows(j, j + 1); } } } }
private static void Sort(int[][] jaggedArray, IRowComparer comparer, IKeyCalculator keyCalc) { if (jaggedArray == null) { throw new ArgumentNullException("jaggedArray"); } for (int i = 0; i < jaggedArray.Length - 1; i++) { for (int j = 0; j < jaggedArray.Length - 1 - i; j++) { if (comparer.Compare(jaggedArray[j], jaggedArray[j + 1], keyCalc) == 1) { Swap(ref jaggedArray[j], ref jaggedArray[j + 1]); } } } }
private CompareResult CompareSorted(DataTable left, DataTable right) { _stopwatch.Restart(); var result = new CompareResult(); _keyMapper = _keyMapperFactory.Create(Config, left, right); _valueMapper = _valueMapperFactory.Create(Config, _keyMapper, left, right); _valueComparer = _rowComparerFactory.CreateValueComparer(_valueMapper, left, right); _keyComparer = _rowComparerFactory.CreateKeyComparer(_keyMapper, left, right); var leftIx = 0; var rightIx = 0; // Go Through All Left Comparing to Right while (leftIx < left.Rows.Count && rightIx < right.Rows.Count) { var leftRow = left.Rows[leftIx]; var rightRow = right.Rows[rightIx]; var keyResult = _keyComparer.Compare(leftRow, rightRow); if (keyResult == 0) { var valueResult = _valueComparer.Compare(leftRow, rightRow); if (valueResult == 0) { result.Same.Add(new CompareResult.Entry(leftRow, rightRow)); } else { result.Different.Add(new CompareResult.Entry(leftRow, rightRow)); } leftIx++; rightIx++; } else if (keyResult < 0) { result.LeftOnly.Add(leftRow); leftIx++; } else { result.RightOnly.Add(rightRow); rightIx++; } } while (leftIx < left.Rows.Count) { var leftRow = left.Rows[leftIx]; result.LeftOnly.Add(leftRow); leftIx++; } while (rightIx < right.Rows.Count) { var rightRow = right.Rows[rightIx]; result.RightOnly.Add(rightRow); rightIx++; } _stopwatch.Stop(); TimeTakenForComparing = _stopwatch.Elapsed; return(result); }