2012-04-04 105 views
4

我有這段代碼,Linq查詢與排序依據字數

public static List<string> GetSentencesFromWords(List<string> words, string fileContents) 
{ 
    return fileContents.Split('.') 
     .Where(s => words.Any(w => s.IndexOf(w) != -1)) 
     .Select(s => s.TrimStart(' ') + ".") 
     .ToList(); 
} 

它出色的作品,其他用戶用它幫助我在另一個問題,但我想我的新問題與此相關的必要一個新的職位。我需要返回的單詞列表按每個句子中匹配的數量排序。我試圖用幾種方法來做,但我對Linq並不是很有經驗,我所嘗試過的所有東西似乎都是按照句子長度而不是字數來排序的。

回答

4

試試這個,它應該適合你嗎?

return fileContents.Split('.') 
    .Where(s => words.Any(w => s.IndexOf(w) != -1)) 
    .Select(s => s.TrimStart(' ') + ".") 
    .OrderByDescending(s => words.Count(w => s.IndexOf(w) != -1)) 
    .ToList(); 
+0

那麼如果一個單詞在句子重複? – scottheckel 2012-04-04 13:46:07

+0

@Hexxagonal好點,但我認爲他只是在尋找有多少匹配在任何單詞上,而不是多個不同的單詞。他只說:「我需要返回的單詞列表按每個句子的匹配數量排序」。我認爲不管是否有多個同一個詞,它仍然是一個匹配? – mattytommo 2012-04-04 13:48:54

+0

是的,再讀一遍......你可能是對的。這並不完全清楚他想要什麼。 – scottheckel 2012-04-04 13:51:08

4

這個什麼:

return fileContents.Split('.') 
    .Where(s => words.Any(w => s.Contains(w) != -1)) 
    .Select(s => s.TrimStart(' ') + ".") 
    .OrderByDescending(s => words.Sum(w => Regex.Matches(s, w).Count)) 
    .ToList(); 

不要忘了包括 using System.Text.RegularExpressions