2016-12-03 16 views
-5

私は助けが必要です。 私はtext1にあるが、text2にはない単語を見つけ出す必要があります。c#2つのテキストで異なる単語を検索

例:

テキスト1(ハロー、ワールドリンゴ、パイナップル、キャベツ、リンゴ)

テキスト2(こんにちは、世界、パイナップル)

結果:

リンゴ2。

キャベツ1;

また、あなたが2つの配列を使用して、あなたがこのような方法であなたの目標を達成することができGroup Byを使用することができますリストなし

+0

...そこにいくつかのパフォーマンスの改善の余地があるが、それは明確にするためにそれらを残しておきます。もちろん、

Word = apple, Count = 2 Word = cabbage, Count = 1 

を返します。 「りんご」の数? –

+0

これは、リンゴがパイナップル、ハローワールド、あなたはどうですか?のようなテキストであることを意味しています。だから私はそれぞれの言葉とそのカウンターを見つける必要があります。 –

答えて

1
string text1 = "hello, world apple,pineapple,cabbage,apple"; 
string text2 = "hello, world,pineapple"; 

string pattern = @"\p{L}+"; 

var list1 = Regex.Matches(text1, pattern).Cast<Match>().Select(x => x.Value); 
var list2 = Regex.Matches(text2, pattern).Cast<Match>().Select(x => x.Value); 


var result = list1.Where(x => !list2.Contains(x)) 
       .GroupBy(x => x) 
       .Select(x =>new 
       { 
        Word = x.Key, 
        Count= x.Count() 
       }) 
       .ToList(); 

これがなぜ「世界のりんご」はに貢献ん

2

をそれを行うには素晴らしいだろう:

string[] text1 = new []{"hello", "world", "apple", "pineapple", "cabbage", "apple"}; 
    string[] text2 = new []{"apple", "pineapple", "cabbage", "apple"}; 

    string[] combinedText = text1.Concat(text2).ToArray(); 
    var groups = combinedText.GroupBy(v => v); 

    foreach(var group in groups) 
     Console.WriteLine("Value {0} has {1} items", group.Key, group.Count()); 

は編集:

あなたは少し違った方法で解決を望んでいるようですので、私はまたそれを下に示しています:

string[] text1 = new []{"hello", "world", "apple", "pineapple", "cabbage", "apple"}; 
    string[] text2 = new []{"apple", "pineapple", "cabbage", "apple"}; 

    var text1Groups = text1.GroupBy(v => v); 
    var text2Groups = text2.GroupBy(v => v); 

    foreach(var group in text1Groups) 
     Console.WriteLine(group.Key.ToString() + group.Count().ToString()); 

    foreach(var group in text2Groups) 
     Console.WriteLine(group.Key.ToString() + group.Count().ToString()); 
+0

否定的な有権者ですか?なぜ否定的な投票ですか? –

関連する問題