找回密码  加入

AUTOIT CN

搜索
查看: 346|回复: 5

[效率算法] 数组合并重复项

[复制链接]
发表于 2019-5-14 16:29:08 | 显示全部楼层 |阅读模式
几千条数据,按第一列合并重复。太漫长了,可有更好的效率写法?听说用SQLITE处理会更专业,有没有适用的例子参考下
for $i=UBound($jtb)-1 to 1 step -1
        for $j=$i-1 to 1 step -1
                if $jtb[$j][0]=$jtb[$i][0] Then
$m=3
                While $m<34
                        if $jtb[$i][$m]<>"" or $jtb[$j][$m]<>"" then
                         $jtb[$i][$m]=$jtb[$j][$m]+$jtb[$i][$m]
                        EndIf
                        $m+=1
                WEnd
                ;ConsoleWrite($jtb[$j][0]&@cr)
                _ArrayDelete($jtb,$j)
                ExitLoop
        EndIf
                Next
        Next
_ArrayDisplay($jtb)
发表于 2019-5-14 20:03:33 | 显示全部楼层
  1. #include <Array.au3>
  2. $New_jtb = _ArrayUnique($jtb)
  3. _ArrayDisplay($New_jtb)
复制代码
 楼主| 发表于 2019-5-15 08:24:00 | 显示全部楼层

我不仅要删除啊,还需要把列后面数据的合并起来
 楼主| 发表于 2019-5-15 14:41:37 | 显示全部楼层
  1. #include <Array.au3>
  2. #include <SQLite.au3>

  3. Dim $test[6] = [1, 1, 4, 2, 2, 4]
  4. _ArrayDisplay($test, "Original data")
  5. _SQLite_Startup()
  6. _SQLite_Open()
  7. _SQLite_Exec(-1, "Create Temp Table tempTable (Temp);")
  8. For $o = 0 to Ubound($test) - 1
  9.        _SQLite_Exec(-1, "Insert into tempTable(Temp) values('" & $test[$o] & "');")
  10. Next
  11. Local $row, $col
  12. _SQLite_GetTable2D(-1, "Select distinct Temp From tempTable;", $test, $row, $col)
  13. _SQLite_Exec(-1, "Drop Table tempTable;")
  14. _SQLite_Close()
  15. _SQLite_Shutdown()
  16. _ArrayDelete($test, 0)
  17. _ArrayDisplay($test, "Result")
复制代码
看了前面有个用SQLITE的列子,思路挺好,多维数组好像不行,对SQLITE熟悉的可能改进下
发表于 2019-5-18 13:58:39 | 显示全部楼层
搜索“字典”
发表于 2019-5-31 23:46:08 | 显示全部楼层
  1. #include <array.au3>
  2.    #include <sqlite.au3>
  3.    _SQLite_Startup()
  4.    $hDb = _SQLite_Open(@DesktopDir&'\Array.db');
  5.    Local $jtb = [[1,2,3],[1,3,5],[2,4,6]]
  6.    Local $Str = ""
  7.    _ArrayDisplay($jtb)
  8.    ;创建表
  9.    For $ii = 0 To UBound($jtb,2)-1 Step 1
  10.           $Str &= "s"&$ii&" Int,"
  11.    Next
  12.    $Str = StringTrimRight($Str,1)
  13.    ConsoleWrite("Create table tableTest("&$Str&");"&@LF)
  14.    _SQLite_Exec($hDb,"Create table tableTest("&$Str&");")
  15.    ;存储数据
  16.    For $ii = 0 To UBound($jtb)-1 Step 1
  17.           Local $iDate = ""
  18.           For $jj = 0 To UBound($jtb,2)-1 Step 1
  19.                  $iDate &= $jtb[$ii][$jj]&","
  20.           Next
  21.           $iDate = StringTrimRight($iDate,1)
  22.           ConsoleWrite($iDate&@LF)
  23.           _SQLite_Exec($hDb,"insert into tableTest values ("&$iDate&");")
  24.    Next
  25.    ;获取第一列字段值
  26.    Local $hQuery,$aRow
  27.    _SQLite_Query($hDb, "SELECT distinct(s0) FROM tableTest;", $hQuery)
  28.    Local $sMsg[1]
  29.    Local $jj = 0
  30.    While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK
  31.           ReDim $sMsg[$jj+1]
  32.           $sMsg[$jj] = $aRow[0]
  33.           $jj += 1
  34.    WEnd
  35.    ;读取结果
  36.    Local $Array[0][UBound($jtb,2)]
  37.    For $ii = 0 To UBound($sMsg)-1 Step 1
  38.           $Str = ""
  39.           For $jj = 0 To UBound($jtb,2)-1 Step 1
  40.                  $Str &= "sum(s"&$jj&"),"
  41.           Next
  42.           $Str = StringTrimRight($Str,1)
  43.           _SQLite_Query($hDb, "SELECT "&$Str&" FROM tableTest where s0 = "&$sMsg[$ii]&";", $hQuery)
  44.           Local $iArray = ""
  45.           While _SQLite_FetchData($hQuery, $iArray) = $SQLITE_OK
  46.                  $iArray[0] = $sMsg[$ii]
  47.                  $iArray1 = $iArray
  48.           WEnd
  49.           _ArrayTranspose($iArray1)
  50.           _ArrayDisplay($iArray1)
  51.           _ArrayConcatenate($Array,$iArray1)
  52.    Next
  53.    _ArrayDisplay($Array)
  54.    _SQLite_Close()
  55.    _SQLite_Shutdown()
复制代码

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2019-8-21 16:24 , Processed in 0.046875 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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