コード例 #1
0
ファイル: ArrayUtilities.cs プロジェクト: zpublic/vs-chromium
        public static ArrayDiffsResult <T> BuildArrayDiffsForLargeArrays <T>(
            IList <T> leftList,
            IList <T> rightList,
            IEqualityComparer <T> comparer)
        {
            comparer = comparer ?? EqualityComparer <T> .Default;

            var result = new ArrayDiffsResult <T>(
                new List <T>(),
                new List <T>(),
                new List <LeftRightItemPair <T> >()
                );

            // Build both map from item to item index.
            var leftMap = new Dictionary <T, int>(leftList.Count, comparer);

            leftList.ForAll((index, x) => leftMap.Add(x, index));

            var rightMap = new Dictionary <T, int>(leftList.Count, comparer);

            rightList.ForAll((index, x) => rightMap.Add(x, index));

            // Append left items, either unique or common with right items
            foreach (var left in leftList)
            {
                var rightIndex = MapIndexOf(rightMap, left);
                if (rightIndex >= 0)
                {
                    result.CommonItems.Add(new LeftRightItemPair <T>(left, rightList[rightIndex]));
                }
                else
                {
                    result.LeftOnlyItems.Add(left);
                }
            }

            // Append right items (unique ones only)
            foreach (var right in rightList)
            {
                var leftIndex = MapIndexOf(leftMap, right);
                if (leftIndex < 0)
                {
                    result.RightOnlyItems.Add(right);
                }
            }

            return(result);
        }
コード例 #2
0
ファイル: ArrayUtilities.cs プロジェクト: zpublic/vs-chromium
        public static ArrayDiffsResult <T> BuildArrayDiffsForSmallArrays <T>(
            IList <T> leftList,
            IList <T> rightList,
            IEqualityComparer <T> comparer)
        {
            comparer = comparer ?? EqualityComparer <T> .Default;

            var result = new ArrayDiffsResult <T>(
                new List <T>(),
                new List <T>(),
                new List <LeftRightItemPair <T> >()
                );

            // Append left items, either unique or common with right items
            foreach (var left in leftList)
            {
                var index = ListIndexOf(rightList, left, comparer);
                if (index >= 0)
                {
                    result.CommonItems.Add(new LeftRightItemPair <T>(left, rightList[index]));
                }
                else
                {
                    result.LeftOnlyItems.Add(left);
                }
            }

            // Append right items (unique ones only)
            foreach (var right in rightList)
            {
                var index = ListIndexOf(leftList, right, comparer);
                if (index < 0)
                {
                    result.RightOnlyItems.Add(right);
                }
            }

            return(result);
        }