2015-11-24 53 views
0

該基礎是大約2000個字符串的列表。他們大多數是單詞。其中一些是兩個和三個字。

現在我的查詢是一個字符串(4到9個字)。我必須找出在這個字符串中出現的所有這些2000個單詞或詞組。

截至目前我正在使用for循環,它爲我工作,但它花了很多時間。什麼是最有效的做法?

搜索在C上的字符串中發生的列表#

+3

能否請您發佈您的代碼呢? –

+0

使用循環是正確的 – chsword

回答

1

您必須使用循環,沒有其他方式來處理多個項目。

這也許是更有效的(很難不代碼進行比較):

string[] words = your4to9Words.Split(); 
List<string> appearing = stringList 
    .Where(s => s.Split().Intersect(words).Any()) 
    .ToList(); 
1

你可以嘗試HashSet的

地方你2000個字到這個HashSet的,然後用HashSet.Compare

HashSet<string> h = new HashSet<string>(); //load your dictionary here 
if (h.Contains(word)) 
    console.log("Found"); 
0

這應該是你在找什麼:

  var binOf2000Words = new List<string>(); 
      var binOf4To9Words = new List<string)(); 

      // And at this point you have some code to populate your lists. 

      // We now need to cater for the fact that some of the items in the 2000Words bin will actually be strings with more than one word... 
      // We'll do away with that by generating a new list that only contains single words. 

      binOf2000Words = binOf2000Words.SelectMany(s => s.Split(' ')).Distinct().ToList(); 

      var result = binOf2000Words.Intersect(binOf4To9Words).Distinct().ToList(); 
0

你可以嘗試這樣的事情:

List<string> binOf2000Words = new List<string> 
         { 
          "One", 
          "Two", 
          "Three Four" 
         }; 
string query = "One Four Three"; 
var queryLookup = query.Split(' ').ToLookup(v => v, v => v); 
var result = binOf2000Words.SelectMany(s => s.Split(' ')).Distinct().Where(w => queryLookup.Contains(w));