首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

大伙儿有没有高效率合并数组中重复元素的办法

2013-12-02 
大家有没有高效率合并数组中重复元素的办法?本帖最后由 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


热点排行