大家有没有高效率合并数组中重复元素的办法?本帖最后由 killpigboy 于 2013-11-29 21:32:06 编辑如题,意思
大家有没有高效率合并数组中重复元素的办法?
本帖最后由 killpigboy 于 2013-11-29 21:32:06 编辑 如题,意思比如创建一个数组有“0、1、1、2”4个元素,经处理后元素为“0、1、2”3个元素,我现在弄了个算法能实现这个功能,但如果数组元素很多,有几万个的话效率就非常低了,因为有大量的把整个数组重新赋值的行为。大家有没有效率高点的办法,数组的元素顺序可重排,感谢。。。
我现在的算法:
'httpdata为需要去除重复元素的数组,DelArray为我自己写的一个剔除数组中指定下标的元素的函数,效率一般
Array.Sort(httpdata)
For i = 0 To UBound(httpdata)
If i = 0 Or i > UBound(httpdata) Then
Continue For
End If
If httpdata(i) = httpdata(i - 1) Then
httpdata = DelArray(httpdata, i)
i = i - 1
End If
Next
[解决办法]自己写了一个。仅对数组遍历一次。效率可能会快些。你实际测量一下吧。
private void button1_Click(object sender, EventArgs e)
{
int [] arr = new int[6]{0,0,0,1,1,4};//原始数组
int num = 0;//当前的尚未发现重复内容的数
int newN=0;//新数组的长度
int n=arr.Length;//原始数组的长度
int[] arrTemp = new int[n];//临时数组
for (int i = 0; i < n; i++)
{
int newNum = arr[i];//当前考察的新数
if (newNum != num
[解决办法]i==0)
{
num = newNum;
arrTemp[newN] = arr[i];
newN++;
}
}
int[] newArr;
newArr = arrTemp.Take<int>(newN).ToArray<int>();//去掉重复的新数组
}
[解决办法]使用List的Distinct方法,代码很简单,示例代码如下:
Dim x As New List(Of Double)
For i As Integer = 0 To 1000000
For j As Integer = 0 To 5
x.Add(i)
Next
Next
'去除重复元素
Dim arr As Array = x.Distinct().ToArray