Как я могу сравнить две строки в С# и получить разницу?
например:
String1: у меня есть автомобиль
string2: у меня есть новый автомобиль bmw
результат: новый, bmw
Как я могу сравнить две строки в С# и получить разницу?
например:
String1: у меня есть автомобиль
string2: у меня есть новый автомобиль bmw
результат: новый, bmw
Вам нужно убедиться, что более крупный набор находится в левой части 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();
}
}
Исходя из вашего вопроса (это немного расплывчато). Это должно работать.
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;
Вы можете использовать алгоритм разностей для этой задачи. В статье "" Алгоритм разностных алгоритмов O (ND) и его вариации") описывается довольно мощный алгоритм для выполнения этой задачи. Для реализации на С# вы можете взглянуть на " Алгоритм разности O (ND) для С# ", но ИМХО это, безусловно, более интересно взглянуть на документ и реализовать его для себя, если вас интересует, как алгоритм работает в деталях.
Это сделано для HTML, но это сработало очень хорошо для меня:
http://www.rohland.co.za/index.php/2009/10/31/csharp-html-diff-algorithm/
Возможно, вы сможете изменить его в своих целях.