如何检查列表中是否已存在项目?

时间:2014-07-06 16:59:55

标签: c# .net

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? 我怎样才能解决它,以便条件能正常工作?

2 个答案:

答案 0 :(得分:2)

如果您使用的是允许您使用System.Linq的框架版本,则可以使用Any()扩展程序:

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

如果在newText中也找到了t的{​​{1}}成员,则该附加信息将返回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 :(得分:0)

您可以添加项目并使用

删除所有重复的条目
yourList.Distinct().ToList();