xhei 发表于 2009-3-6 23:05:54

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

有一个数组
a=1
a=1
a=4
a=4

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

[ 本帖最后由 xhei 于 2009-3-8 00:43 编辑 ]

xhei 发表于 2009-3-6 23:47:31

有没这样的函数可使用

pusofalse 发表于 2009-3-7 00:41:31

没有找到相关的数组函数, 来个取巧的,用sql。。。 - -||||||
#include <Array.au3>
#include <SQLite.au3>

Dim $test =
_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")

netegg 发表于 2009-3-7 10:10:39

似乎用双重循环可以解决

rolaka 发表于 2009-3-7 10:25:04

原帖由 pusofalse 于 2009-3-7 00:41 发表 http://www.autoitx.com/images/common/back.gif
没有找到相关的数组函数, 来个取巧的,用sql。。。 - -||||||
#include
#include

Dim $test =
_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 编辑 ]

pusofalse 发表于 2009-3-7 17:02:35

回复 5# rolaka 的帖子

_ArrayUnique? 现在自己在用的版本中没有发现这个函数~ 另外测试兄的代码出错。 原因只是只会检测相邻的两元素是否相同。test= 实际只能去除重复项1。

rolaka 发表于 2009-3-7 17:53:49

原帖由 pusofalse 于 2009-3-7 17:02 发表 http://www.autoitx.com/images/common/back.gif
_ArrayUnique? 现在自己在用的版本中没有发现这个函数~ 另外测试兄的代码出错。 原因只是只会检测相邻的两元素是否相同。test= 实际只能去除重复项1。
忘记说了....需要先排序.... 这里没有加排序算法

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

[ 本帖最后由 rolaka 于 2009-3-7 17:54 编辑 ]

pusofalse 发表于 2009-3-7 18:23:58

回复 7# rolaka 的帖子

不好意思,是我看漏了。只在帮助文档中找了下,发现没有。也没有到include目录去找~ - -
治学问题.... - -|||

xhei 发表于 2009-3-8 00:43:07

rolaka兄代码解决了我的问题,感谢~~
结贴了

xrbenbeba 发表于 2009-3-8 18:57:06

学习 了 :face (2):

minterz 发表于 2010-1-29 19:25:20

为什么三楼的结果还是有重复呢?
如何解决啊?

jixiren001 发表于 2012-3-26 23:13:33

#include <Array.au3>
Local $aArray =
_ArrayDisplay($aArray, "包含重复" )
$aArray = _ArrayUnique($aArray)
_ArrayDisplay($aArray, "去除重复" )
;$aArray=不重复数组元素总数
;经测试一维数组里用_ArrayUnique前未使用_ArraySort排序也可以正常去除数组的重复值啊

weeks5 发表于 2013-2-13 07:53:04

thank!!!!!
页: [1]
查看完整版本: 如何清除数组里面的重复记录