Làm thế nào tôi có thể so sánh hai chuỗi trong C# và nhận được sự khác biệt?So sánh hai chuỗi và nhận được sự khác biệt
ví dụ:
Chuỗi1: tôi có một chiếc xe
chuỗi2: tôi có một chiếc xe mới bmw
kết quả: mới, bmw
Làm thế nào tôi có thể so sánh hai chuỗi trong C# và nhận được sự khác biệt?So sánh hai chuỗi và nhận được sự khác biệt
ví dụ:
Chuỗi1: tôi có một chiếc xe
chuỗi2: tôi có một chiếc xe mới bmw
kết quả: mới, bmw
Bạn cần phải chắc chắn rằng các thiết lập lớn hơn là ở phía bên tay trái của Except
(không chắc chắn nếu có một LINQ cách tinh khiết để đạt được điều đó):
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();
}
}
công việc này không, nói rằng riêng biệt phải có đối số. Và ngoại trừ nói: Lỗi 'System.Collections.Generic.IEnumerable
làm việc cho tôi trong .NET 3.5 Bạn đang sử dụng .NET 2.0? –
có thể là một số tham chiếu. bạn có tài liệu tham khảo gì? – Luis
Bạn có thể sử dụng một thuật toán khác biệt cho điều này bài tập. Bài báo "An O(ND) Difference Algorithm and Its Variations" mô tả một thuật toán khá mạnh để hoàn thành nhiệm vụ này. Để thực hiện trong C#, bạn có thể xem "An O(ND) Difference Algorithm for C#", nhưng IMHO nó chắc chắn thú vị hơn khi có một cái nhìn vào giấy và thực hiện nó cho chính mình trong trường hợp bạn quan tâm đến cách thuật toán hoạt động chi tiết.
Đặt câu hỏi của bạn (Có chút mơ hồ) tính năng này sẽ hoạt động.
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();
Ở phía trên cùng của tập tin của bạn chắc chắn rằng bạn bao gồm:
using System.Linq;
điều này sẽ làm cho hai dây giống hệt nhau: "tôi có một chiếc xe" và "chiếc xe tôi có". Nhưng có, không chắc chắn rằng đó là OK với OP. –
hoạt động với lặp lại? ví dụ "tôi có một chiếc xe tôi có" so với "tôi có một chiếc xe" – Luis
không trả lại kết quả nếu đặt nhỏ hơn ở bên trái –
Nó được làm cho HTML, nhưng điều này đã làm việc thực sự tốt cho tôi:
http://www.rohland.co.za/index.php/2009/10/31/csharp-html-diff-algorithm/
Bạn có thể có thể sửa đổi nó cho mục đích của riêng bạn.
Chúng ta có thể giả sử bạn muốn nó chia bởi Ranh giới từ? – ChaosPandion
Còn khoảng cách giữa "mới" và "ô tô" và giữa "xe hơi" và "bmw" thì sao? Bạn có cần phải biết rằng một trong những từ đã xảy ra trước khi "xe hơi" và một từ khác sau? Điều gì về sự khác biệt giữa "tôi có một chiếc xe mới" và "tôi có một chiếc xe mới"? "mới" có khác biệt ở đây không? Điều gì về xóa? "Tôi có một chiếc xe mới" so với "tôi có một chiếc xe hơi"? Bạn có muốn biết rằng "mới" + không gian đã bị xóa không? Tóm lại, bạn cần cho chúng tôi biết một số giả định hoặc giới hạn của bạn đối với vấn đề của bạn. –
@Lasse V. Karlsenno, trong trường hợp đó sự khác biệt là "đó", "là" @ChaosPandion, tôi nghĩ có: p. Tôi không biết làm thế nào tôi có thể làm điều này: S – Luis