İki dizeyi C# ile nasıl karşılaştırabilirim? örneğinİki dizeyi karşılaştırın ve farkı alın
:
String1 i bir araba
dize2 vardır: i bmw
sonuç araban yeni: Yeni, bmw
İki dizeyi C# ile nasıl karşılaştırabilirim? örneğinİki dizeyi karşılaştırın ve farkı alın
:
String1 i bir araba
dize2 vardır: i bmw
sonuç araban yeni: Yeni, bmw
, kolay bağlantı emin geniş seti sol tarafındadır Except
(Bunu başarmak için saf Linq yolu var olup olmadığından emin değil):
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();
}
}
sol tarafa daha küçük ayar yapmazsanız, farklı argümanların olması gerektiğini söyleyin. Ve şöyle diyor: Hata 'System.Collections.Generic.IEnumerable
.NET 3.5 benim için çalışır mı? .NET 2.0 kullanıyor musunuz? –
belki bazı referanslar. Hangi referansın var? VS 2008 – Luis
Bunun için bir fark algoritması kullanabilirsiniz görev. "An O(ND) Difference Algorithm and Its Variations" kağıdı, bu görevi gerçekleştirmek için oldukça güçlü bir algoritmayı açıklamaktadır. C# 'da bir uygulama için "An O(ND) Difference Algorithm for C#"' a bakabilirsiniz, ancak IMHO, makaleye bir göz atmak ve algoritmanın nasıl çalıştığına bakmak istediğinizde kendiniz için uygulamak için daha ilginçtir.
Sorunuz yanıtlandıktan (Bu biraz belirsiz.) bu işe yaramalı. senin dosyasının en üstünde
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();
eklemek emin olun:
using System.Linq;
'un farkına varmaz, bu iki dizeyi aynı yapar: "bir arabam var" ve "araba sahibiyim". Ama evet, OP ile tamam olup olmadığını belirsiz. –
bu tekrarlarla çalışır? örneğin "bir arabam var" vs "bir arabam var" – Luis
hiçbir sonuç döndürürse sol tarafta –
Bu HTML için yapılmış, ama bu benim için gerçekten iyi çalıştı:
http://www.rohland.co.za/index.php/2009/10/31/csharp-html-diff-algorithm/
Sen may kendi amaçlarınız için değiştirebilir.
biz kabul edebilir bunu tarafından bölünmüş istiyorum kelime sınırı? – ChaosPandion
"Yeni" ile "araba" arasındaki ve "araba" ile "bmw" arasındaki boşluklardan ne haber? Kelimelerin birinin "araba" dan önce ve diğerinin peşinde olduğunu bilmek ister misiniz? “Yeni bir arabam var” ve “yeni bir arabam var” arasındaki farktan ne haber? Burada "yeni" bir fark var mı? Silmelere ne dersin? "Yeni bir arabam var" vs "Ben bir arabam var"? "Yeni" nin + bir alanın kaldırıldığını bilmek ister misiniz? Kısacası, bize bazı varsayımlarınızı veya sorunlarınızla ilgili sınırlarınızı söylemeniz gerekir. –
@Lasse V. Karlsenno, bu durumda fark "o", " @ ChaosPandion, sanırım evet: p. Bunu nasıl yapabilirim bilmiyorum: S – Luis