2014-07-06 98 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(); 
相关问题