2014-07-06 131 views
-1
for (int i = 0; i < t.Count; i++) 
{ 
    if (!newText.Contains(t[i])) 
    { 
     if (firsttime > 1) 
     {       
       newText.Insert(0, string.Empty); 
       newText.Insert(0, ExtractLinks.FilteredLinks[i]); 
       newText.Insert(0, dateTimeList[i]); 
       newText.Insert(0, t[i]); 
     } 
     else 
     { 
      newText.Add(t[i]); 
      newText.Add(dateTimeList[i]); 
      newText.Add(ExtractLinks.FilteredLinks[i]); 
      newText.Add(string.Empty); 
     } 
    } 
} 

我通過計時器滴答事件重複多次調用此循環。 第一次變量t(List<string>)包含43個項目。 而List<string> newText包含172個項目。如何檢查列表中是否存在項目?

我想檢查t中是否有任何newText已經存在,請不要再加newText

我想這個問題是,我正在循環過t.Count,我應該不知何故也循環了newText? 我該如何解決這個問題,以便條件正常工作?

+6

您是否嘗試過的HashSet,而不是列出所有重複的條目? – EZI

回答

2

如果您使用的版本,它允許你使用System.Linq可以使用Any()擴展的框架:

newText.Any(r => t.Contains(r)); 

如果存在的newText甚至一個部件,其也t找到擴展名將返回true。

編輯:作爲事後考慮,你可以用.Except()擴展更優雅地做到這一點,但我建議你在嘗試任何真正的優化之前以一種簡單的方式實現這個工作。

編輯2:

static void Main(string[] args) 
    { 
     var t = new List<string>();  // starts with 43 items 
     var newText = new List<string>(); // starts with 172 items 

     t.AddRange(Enumerable.Range(1, 43).Cast<string>()); 
     newText.AddRange(Enumerable.Range(1, 172).Cast<string>()); 

     // add only members t that do not exist in set newText (44..172 added) 
     newText.AddRange(t.Except(newText)); 
    } 
+1

如果'newText'和't'都是List,那麼複雜度就是'O(N * N)'。我不會使用這個。 – EZI

0

你可以只添加的項目,並刪除

yourList.Distinct().ToList(); 
相關問題