循环后,如何从列表中删除重复项?

时间:2014-07-10 00:52:38

标签: c# .net

public static void FilterLockedThreads(List<string> Links, List<string> LockedLinks)
        {
            string number; 
            string number1;
            for (int i = 0; i < Links.Count; i++)
            {
                number = Links[i].Substring(32, 6);
                for (int x = 0; x < LockedLinks.Count; x++)
                {
                    number1 = LockedLinks[x].Substring(61, 6);
                    if (Links[i].Contains(LockedLinks[x]))
                    {

                        if (number == number1)
                        {
                            string identical = number;
                        }

                    }
                }
            }
        }

我使用了断点,并且有些数字是LockedLinks中也存在于Links中的项目的一部分。 列表LockedLinks和链接都是

例如在Links中我有50个项目和LockedLinks 7个项目。例如,在链接中,索引32中的项目是:

http://rotter.net/forum/scoops1/115156.shtml

在索引3中的LockedLinks中:

http://rotter.net/cgi-bin/forum/dcboard.cgi?az=read_count&om=115156&forum=scoops1

在这两个项目中都有相同的数字:115156 由于此数字存在于索引32中的Links以及索引3中的LockedLinks中,因此我想从Links和LockedLinks中删除此索引。

在链接中删除索引32和LockedLinks索引3。

我使用substring从每个列表中获取每个迭代的数字,但是它永远不会进入内部永远不会得到相同的字符串。

如何使比较与循环一起使用?如果相同,如何删除两个索引?

4 个答案:

答案 0 :(得分:0)

我会使用Linq删除重复项:

using System.Collections.Generic;
using System.Linq;

...

List<int> distinct = list.Distinct().ToList();

http://www.dotnetperls.com/remove-duplicates-list

答案 1 :(得分:0)

这是因为这一行:

if (Links[i].Contains(LockedLinks[x]))

可能总是评估为假。我不知道为什么你有if语句。

同样要删除这些索引处的项目,如果在循环中找到匹配项,则可以为每个数组保留一个列表,并分别为每个数组添加xi的值然后使用这些索引从中删除每个数组中的项目。

答案 2 :(得分:0)

在您的示例中,此行将阻止数字比较:

if (Links[i].Contains(LockedLinks[x]))
{

我认为你应该删除它。

答案 3 :(得分:0)

首先使用更正确的方法来获取数字:

var num1 = Path.GetFileNameWithoutExtension("http://rotter.net/forum/scoops1/115156.shtml"); //return 115156
var num2 = HttpUtility.ParseQueryString(new Uri("http://rotter.net/cgi-bin/forum/dcboard.cgi?az=read_count&om=115156&forum=scoops1").Query)["om"]; //return 115156

使用这些方法,您可以获得两个列表,然后检查常用数字以删除它们

var newList = list1nums.Except(list2nums).ToList();