如何从列表列表中的重复值转义#

How to escape from duplicates values in List of Lists c#

var _array = new int[] { -4, -2, -1, 1, 2, 4 };

var keepPerms = new List<List<int>>();

        var _l = new List<int>();
        var c = 0;
        while (c != 2)
        {
            for (int i = 0;i < _array.Length; i++)
            {
                _l.Add(_array[i]);
                List<int> _sort = _l.OrderBy(s => s).ToList();
                if (!keepPerms.Contains(_sort))
                    keepPerms.Add(_sort);
                

            }
            _l.Clear();
            
            c++;
        }
        foreach (var item in keepPerms)
        {                
            {
                Console.WriteLine(String.Join(" ", item));
            }
            Console.WriteLine();
        }
        Console.WriteLine();

我得到的输出:

-4

-4 -2

-4 -2 -1

-4 -2 -1 1

-4 -2 -1 1 2

-4 -2 -1 1 2 4

-4

-4 -2

-4 -2 -1

-4 -2 -1 1

-4 -2 -1 1 2

-4 -2 -1 1 2 4

我需要的输出:

-4

-4 -2

-4 -2 -1

-4 -2 -1 1

-4 -2 -1 1 2

-4 -2 -1 1 2 4

这是一个方法原型,我需要在其中找到某些序列的子集。主要问题是,在执行此方法后,我得到了子集的副本。有没有办法获得列表的原始值,尽管我调用了它的次数?你能建议更好的方法来找到这个列表的原始值吗?

因为条件while(c != 2)你得到两个结果,你可以把它换成while(c != 1) 并且会起作用,或者您可以删除 while,因为它对您的情况没有真正帮助。

List.Contains() 使用默认的相等比较器。 List<int> a == List<int> b 仅当它是相同的对象时。 您应该在 Contains() 中使用自定义相等比较器或使用 Any + SequenceEqual:

if (!keepPerms.Any(item => item.SequenceEqual(_sort)))
  keepPerms.Add(_sort);