C# 在不使用额外数组的情况下从int数组中删除重复值的最佳方法?

C# 在不使用额外数组的情况下从int数组中删除重复值的最佳方法?,c#,C#,我需要在不使用额外数组的情况下从int数组中删除重复值,在从数组中删除重复值后,如何调整数组长度 例如:- int[]arr=newint[]{1,2,1,3,3,5,6,1,3,2,8}//数组长度为11 删除重复值后,输出应为{1,2,3,5,6,8}//数组长度为6 那怎么可能呢 **我不允许使用预定义的方法,只需要使用正确的逻辑执行。基本上你不能:数组在.NET中是固定大小的。您无法调整它们的大小 您可能会保留一个单独的变量来指示数组的“已使用”部分,最后得到一个数组(比如){1、2、3

我需要在不使用额外数组的情况下从int数组中删除重复值,在从数组中删除重复值后,如何调整数组长度

例如:-

int[]arr=newint[]{1,2,1,3,3,5,6,1,3,2,8}//数组长度为11

删除重复值后,输出应为{1,2,3,5,6,8}//数组长度为6

那怎么可能呢


**我不允许使用预定义的方法,只需要使用正确的逻辑执行。

基本上你不能:数组在.NET中是固定大小的。您无法调整它们的大小


您可能会保留一个单独的变量来指示数组的“已使用”部分,最后得到一个数组(比如){1、2、3、5、6、8、0、0、0、0、0、0},“已使用长度”为6。除了避免使用额外的阵列之外,在性能方面还不清楚您感兴趣的方面。例如,您可以对数组进行排序,然后向前走,每次遇到连续相等的元素时,将剩余的元素向上移动一个值。

正如Jon提到的,您不能调整数组的大小。最好的方法是使用Hashset


如果不允许使用Hashset,请对它们进行排序。但在这里,您应该创建一个新数组来保存结果。

为什么不能执行一个
arr=arr.Distinct().ToArray()
?这个问题是在一次访谈中提出的。它使用了一个预定义的方法和一个额外的数组。