2013-07-22 142 views
-4

我有一個名爲post summary的頁面。 在這個頁面下,我想統計單詞總數和唯一單詞總數。 我成功地計算了帖子中單詞的總數。 但是,我不知道如何計算獨特的單詞。計算字符串中的唯一字

例如:「我今天非常喜歡上學。」

預期輸出:

Total word count: 6 
Unique word count: 5 

這裏是我當前的代碼:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 

namespace empTRUST 
{ 
    public partial class PostSummary : Form 
    { 
     string target_fbid; 
     string fbStatus; 

     public PostSummary(string target_fbid, string fbStatus) 
     { 
      InitializeComponent(); 
      this.target_fbid = target_fbid; 
      this.fbStatus = fbStatus; 
     } 

     private void PostSummary_Load(object sender, EventArgs e) 
     { 
      label_totalwordcount.Text = fbStatus.Split(new char[] {' '}, StringSplitOptions.RemoveEmptyEntries).Length.ToString(); 
     } 
    } 
} 
+9

你是怎麼從「今天我非常喜歡學校」獲得5個獨特的字數? –

+0

我認爲他的意思是獨特的字母 – Zaki

+0

@Sam如果他的意思是字母,它會超過5 –

回答

1

可以使用這樣的事情:

"I enjoyed school school today very much.".Split(' ').Distinct() 

這一個返回6,即使有「學校「字出現2次。

編輯

如果你需要一些自定義的比較邏輯(比如不區分大小寫),你可以使用Distinct overload在那裏你可以指定自定義相等比較。

+0

'但是。但是''會返回3,不是嗎? –

+0

@ ta.speot.is:我編輯了我的答案。 – Tigran

3

我不明白你的例子,因爲"I enjoyed school today very much"中沒有重複單詞。然而,這是一種天真的方法,可能適用於你:

var allWords = text.Split(); 
int count = allWords.Length; // 6 
int unqiueCount = allWords.Distinct().Count(); // 6 

這是天真的,因爲標點字符修改結果。所以,你可能要更換他們的第一步:

var allWords = text.ToUpperInvariant().Replace(".", "").Replace(",","").Split(); // ... 

而且,情況改變了結果,所以如果需要,你可以比較不區分大小寫。

+0

我認爲這裏可以使用'Char.IsLetter'和'Char.IsWhitespace'函數。 –

+0

@ ta.speot.is:問題是我們不知道字符串的格式是什麼。 – Tigran

0

第一個因子評分是:

public int GetUniqueWordsCount(string input) 
{ 
    return input.Split(' ').GroupBy(s => s).Count(); 
} 

如果你想不區分大小寫的解決方案,您可以添加.ToLower().ToUpper()轉換到組鍵選擇。如果你想要一些自定義的比較邏輯,你也可以實現你自己的IEqualityComparer