找回密码
 加入
搜索
查看: 4247|回复: 12

如何清除数组里面的重复记录

[复制链接]
发表于 2009-3-6 23:05:54 | 显示全部楼层 |阅读模式
有一个数组
a[0]=1
a[1]=1
a[2]=4
a[3]=4

如何清除重复的数据,得到以下的数组
a[0]=1
a[1]=4

[ 本帖最后由 xhei 于 2009-3-8 00:43 编辑 ]
 楼主| 发表于 2009-3-6 23:47:31 | 显示全部楼层
有没这样的函数可使用
发表于 2009-3-7 00:41:31 | 显示全部楼层
没有找到相关的数组函数, 来个取巧的,用sql。。。 - -||||||
#include <Array.au3>
#include <SQLite.au3>

Dim $test[6] = [1, 1, 4, 2, 2, 4]
_ArrayDisplay($test, "Original data")

_SQLite_Startup()
_SQLite_Open()
_SQLite_Exec(-1, "Create Temp Table tempTable (Temp);")
For $o = 0 to Ubound($test) - 1
       _SQLite_Exec(-1, "Insert into tempTable(Temp) values('" & $test[$o] & "');")
Next

Local $row, $col
_SQLite_GetTable2D(-1, "Select distinct Temp From tempTable;", $test, $row, $col)
_SQLite_Exec(-1, "Drop Table tempTable;")
_SQLite_Close()
_SQLite_Shutdown()
_ArrayDelete($test, 0)
_ArrayDisplay($test, "Result")
发表于 2009-3-7 10:10:39 | 显示全部楼层
似乎用双重循环可以解决
发表于 2009-3-7 10:25:04 | 显示全部楼层
原帖由 pusofalse 于 2009-3-7 00:41 发表
没有找到相关的数组函数, 来个取巧的,用sql。。。 - -||||||
#include
#include

Dim $test[6] = [1, 1, 4, 2, 2, 4]
_ArrayDisplay($test, "Original data")

_SQLite_Startup()
_SQLite_Open()
...


我汗.....都用到<array.au3>了...
_ArrayUnique 
--------------------------------------------------------------------------------

Returns the Unique Elements of a 1-dimensional array.


#Include <Array.au3>
_ArrayUnique($aArray[, $iDimension = 1[, $iBase = 0[, $iCase = 0[, $vDelim = "|"]]]])
这个就是啊!!!!!............不过效率很低...下面是我的办法 但是没有完善 有点问题的 效率比_ArrayUnique高很多- -


;清理重复项
Func ArrayUnique($array)
        For $i = 1 To UBound($array) - 1
                If $array[$i] == $array[$i - 1] Then
                        $array[$i - 1] = ""
                EndIf
        Next
        $Temp = _ArrayToString($array)
        For $i = 0 To 10
                $Temp = StringReplace($Temp, "||", "|")
        Next
        $Temp = StringRegExpReplace($Temp, "^[\|]*", "")
        $Temp = StringRegExpReplace($Temp, "[\|]*$", "")
        Return StringSplit($Temp, "|", 2)
EndFunc   ;==>ArrayUnique


[ 本帖最后由 rolaka 于 2009-3-7 10:32 编辑 ]
发表于 2009-3-7 17:02:35 | 显示全部楼层

回复 5# rolaka 的帖子

_ArrayUnique? 现在自己在用的版本中没有发现这个函数~ 另外测试兄的代码出错。 原因只是只会检测相邻的两元素是否相同。test[7]=[1, 1, 2, 3, 2, 3, 5] 实际只能去除重复项1。
发表于 2009-3-7 17:53:49 | 显示全部楼层
原帖由 pusofalse 于 2009-3-7 17:02 发表
_ArrayUnique? 现在自己在用的版本中没有发现这个函数~ 另外测试兄的代码出错。 原因只是只会检测相邻的两元素是否相同。test[7]=[1, 1, 2, 3, 2, 3, 5] 实际只能去除重复项1。

忘记说了....需要先排序.... 这里没有加排序算法

顺便 _ArrayUnique函数不可能没有的- - 这个东西很早就出现在array.au3里了好像

[ 本帖最后由 rolaka 于 2009-3-7 17:54 编辑 ]
发表于 2009-3-7 18:23:58 | 显示全部楼层

回复 7# rolaka 的帖子

不好意思,是我看漏了。只在帮助文档中找了下,发现没有。也没有到include目录去找~ - -
治学问题.... - -|||
 楼主| 发表于 2009-3-8 00:43:07 | 显示全部楼层
rolaka兄代码解决了我的问题,感谢~~
结贴了
发表于 2009-3-8 18:57:06 | 显示全部楼层
学习 了
发表于 2010-1-29 19:25:20 | 显示全部楼层
为什么三楼的结果还是有重复呢?
如何解决啊?
发表于 2012-3-26 23:13:33 | 显示全部楼层
#include <Array.au3>
Local $aArray[30] = [9,8,7,6,5,4,3,2,1,0,9,8,7,6,5,4,3,2,1,0,0,1,2,3,4,5,6,7,8,9]
_ArrayDisplay($aArray, "包含重复" )
$aArray = _ArrayUnique($aArray)
_ArrayDisplay($aArray, "去除重复" )
;$aArray[0]=不重复数组元素总数
;经测试一维数组里用_ArrayUnique前未使用_ArraySort排序也可以正常去除数组的重复值啊
发表于 2013-2-13 07:53:04 | 显示全部楼层
thank!!!!!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-29 11:30 , Processed in 0.130713 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表