コード例 #1
0
        public int[] SwapTwoRange(int[] genes, GeneRange range1, GeneRange range2)
        {
            if (range2.Position < range1.Position)
            {
                var r = range2;
                range2 = range1;
                range1 = r;
            }

            if (range2.Position < range1.Position + range1.Length)
            {
                if (range1.IsDisjointWith(range2))
                {
                    var error = true;
                }

                throw new ArgumentException("Gene ranges are overlapped!");
            }
            var temp = new int[genes.Length];
            var range1EndPosition = range1.Position + range1.Length;
            var range2EndPosition = range2.Position + range2.Length;
            var middleLength      = range2.Position - range1EndPosition;

            if (range1.Position > 0)
            {
                Array.Copy(genes, 0, temp, 0, range1.Position);
            }
            Array.Copy(genes, range2.Position, temp, range1.Position, range2.Length);
            if (middleLength > 0)
            {
                Array.Copy(genes, range1EndPosition, temp, range1.Position + range2.Length, middleLength);
            }
            Array.Copy(genes, range1.Position, temp, range2EndPosition - range1.Length, range1.Length);
            if (range2EndPosition < genes.Length)
            {
                Array.Copy(genes, range2EndPosition, temp, range2EndPosition, genes.Length - range2EndPosition);
            }

            return(temp);
        }