Подтвердить что ты не робот

Сравните две строки и получите разницу

Как я могу сравнить две строки в С# и получить разницу?

например:

String1: у меня есть автомобиль

string2: у меня есть новый автомобиль bmw

результат: новый, bmw

4b9b3361

Ответ 1

Вам нужно убедиться, что более крупный набор находится в левой части Except (не уверен, есть ли чистый способ Linq для этого):

    static void Main(string[] args)
    {
        string s1 = "i have a car a car";
        string s2 = "i have a new car bmw";

        List<string> diff;
        IEnumerable<string> set1 = s1.Split(' ').Distinct();
        IEnumerable<string> set2 = s2.Split(' ').Distinct();

        if (set2.Count() > set1.Count())
        {
            diff = set2.Except(set1).ToList();
        }
        else
        {
            diff = set1.Except(set2).ToList();
        }
    }

Ответ 2

Исходя из вашего вопроса (это немного расплывчато). Это должно работать.

var first = string1.Split(' ');
var second = string2.Split(' ');
var primary = first.Length > second.Length ? first : second;
var secondary = primary == second ? first : second;
var difference = primary.Except(secondary).ToArray();

В верхней части файла убедитесь, что вы включили:

using System.Linq;

Ответ 3

Вы можете использовать алгоритм разностей для этой задачи. В статье "" Алгоритм разностных алгоритмов O (ND) и его вариации") описывается довольно мощный алгоритм для выполнения этой задачи. Для реализации на С# вы можете взглянуть на " Алгоритм разности O (ND) для С# ", но ИМХО это, безусловно, более интересно взглянуть на документ и реализовать его для себя, если вас интересует, как алгоритм работает в деталях.