Esempio n. 1
0
        /// <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]);
                    }
                }
            }  
                 
        }
Esempio n. 3
0
        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);
        }