Этот вопрос закрыт для ответов, так как повторяет вопрос Как записать отличия между двумя текстовыми файлами в 3й файл?
@Ruslan_PR

Сравнить два массива, вывести отличия?

Имеется два массива, состоящие из строк, например:
Образец
Входной массив:
строка 1
строка 2
строка 3
строка 4
строка 5

Измененный массив:
строка 1
строка 3
строка 54
строка 87
строка 5
строка 10

Ожидаемый результат, новый массив:
строка 1
строка 2 - удалена
строка 3
строка 4 - удалена
строка 54 - новая
строка 87 - новая
строка 5
строка 10 - новая


Реализовал пока так:
Код
// Определение максимальной длины списка
            int maxLength = (SourceList.Count > ChangeList.Count) ?
                SourceList.Count : ChangeList.Count;
List<string> ResultTestList = new List<string>();

            for (int i = 0; i < ChangeList.Count; i++)
            {
                string _line2 = ChangeList[i].ToString();

                if (SourceList.Contains(_line2))
                {
                    ResultTestList.Add(_line2);
                }
                else
                {
                    ResultTestList.Add(_line2 + ": [+]");
                }
            }

            var diff_arr = SourceList.Except(ChangeList);

            foreach (var item in diff_arr)
            {
                ResultTestList.Add(item.ToString() + ": [-]");
            }

            ResultTestList.Count();


В таком виде работает. Вопрос: как можно реализовать такой алгоритм, чтоб результатом был массив, как в образце выше, иначе на данный момент все удаленный строки попадают в конец массива
  • Вопрос задан
  • 1415 просмотров
Ответы на вопрос 2
@Denioo
Можно гораздо проще сравнить и вывести отличия. С помощью Linq
Например:
var str1 = new List<string>(){"10","2","3","87"};
var str2 = new List<string>(){"15","2","3","95"};

var rez = str1.Intersect(str2);

выведет 2 и 3, дальше уже делайте что вздумается.
Ответ написан
lam0x86
@lam0x86
Просто погуглите "C# diff algo".
Например, вот библиотечка от самого гугла: https://github.com/google/diff-match-patch
Она правда по умолчанию работает на уровне символов, а не строк, но это можно исправить вот так:
https://github.com/google/diff-match-patch/wiki/Li...
Ответ написан
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы