C#删除List <int>中的重复项

时间:2016-03-05 20:30:55

标签: c#

所以我的代码基本上是这样的:

List list = new List(new int [] {1,5,8,8,8,2,3,3,4,});         list = RemoveDuplicats(list);

public static List<int> RemoveDuplicats(List<int> list)
{
   int i = 0;
   while (i<list.Count)
      {
        if (list[i] == list[i+1])
          {
            list.RemoveAt(list[i + 1]);
            return list;
          }
          i++;
      }
    return list;
  }

似乎RemoveAt无法正常工作或完全被跳过。所以我应该得到的是1,5,8,2,3,4,但它只是打印原始列表。哪里出错了?

2 个答案:

答案 0 :(得分:10)

使用Distinct IEnumerable扩展

List<int> list = new List<int>() { 1, 5, 8, 8, 8, 2, 3, 3, 4, }; 
list = list.Distinct().ToList();
  

使用默认值从序列中返回不同的元素   等于比较来比较值。

但是,这个解决方案的一部分在你的问题的许多重复中解释,我想解释你的错误。

您当前的代码无法正常工作,因为当您找到第一个副本时,您调用RemoveAt传递元素(8)的值,而不是要删除的元素的索引(2)as RemoveAt requires。你很幸运,这不会创建一个超出范围的例外。此外,您立即退出并返回其他重复项。

如果您仍想使用手工删除代码,可以尝试使用此

public List<int> RemoveDuplicats(List<int> list)
{
    int i = 0;
    List<int> distinctElements = new List<int>();
    while (i < list.Count)
    {
        if (!distinctElements.Contains(list[i]))
            distinctElements.Add(list[i]);
        i++;
    }
    return distinctElements;
}

答案 1 :(得分:0)

我会使用distinct。

list.Distinct().ToList()