binghc 发表于 2012-6-10 13:05:06

本帖最后由 binghc 于 2012-6-10 13:06 编辑

回复 6# afan


一直用 Assign Eval IsDeclared 组合模拟哈希,计算楼主这样的问题挺爽,但始终没真正的哈希好用{:face (197):}

user3000 发表于 2012-6-10 18:44:12

回复 14# netegg

谢谢蛋大!

这是我晚交的功课, 主要利用数组来处理.
#include <array.au3>
Local $Str = _
                '12345      2' & @CRLF & _
                '12344      1' & @CRLF & _
                '22110      2' & @CRLF & _
                '12005      1' & @CRLF & _
                '5512      2' & @CRLF & _
                '22110      5' & @CRLF & _
                '12344      3'
MsgBox(0, '原字符串', $Str)
Local $aSR = StringRegExp($Str, '(\d+)      (\d+)', 3)
Local $sOut, $totle
For $i = 0 To UBound($aSR) - 1 Step 2
$index = _ArraySearch($sOut, $aSR[$i])
If @error Then
          _ArrayAdd($sOut, $aSR[$i])
          _ArrayAdd($totle, $aSR[$i+1])
          ContinueLoop
EndIf
$totle[$index] += $aSR[$i+1]
Next
$Str = ''
For $i = 1 To UBound($sOut) -1
        $Str &= $sOut[$i] & @TAB & $totle[$i] & @CRLF
Next
MsgBox(0, '合并计算', $Str)

kevinch 发表于 2012-6-10 19:47:02

Local $Str = _
                "12345"&@TAB&"2"&@CRLF& _
                "12344"&@TAB&"1"&@CRLF& _
                "22110"&@TAB&"2"&@CRLF& _
                "12005"&@TAB&"1"&@CRLF& _
                "5512"&@TAB&"2"&@CRLF& _
                "22110"&@TAB&"5"&@CRLF& _
                "12344"&@TAB&"3"
Local $aSR = StringSplit($Str,@CRLF,1)
Local $arr,$sOut=""
Local $dic = ObjCreate("scripting.dictionary")
For $i = 1 To $aSR
        $arr=StringSplit($aSR[$i],@TAB)
        If $dic.exists($arr) Then
                $dic($arr)=$dic($arr)+Number($arr)
        Else
                $dic($arr)=Number($arr)
        EndIf
Next
$arr=$dic.keys
For $i=0 To UBound($arr)-1
        $sOut=$sOut&$arr[$i]&@tab&$dic($arr[$i])&@CRLF
Next
MsgBox(0, '合并计算', $sOut)广开思路吧

gto250 发表于 2012-6-10 20:38:32

Local $Str = _
                '12345      2' & @CRLF & _
                '12344      1' & @CRLF & _
                '22110      2' & @CRLF & _
                '12005      1' & @CRLF & _
                '5512      2' & @CRLF & _
                '22110      5' & @CRLF & _
                '12344      3'

Local $aSR = StringRegExp($Str, '(\d+)      (\d+)', 3)

Local $arr,$sOut=""
Local $dic = ObjCreate("scripting.dictionary")
For $i = 0 To UBound($aSR) - 1 Step 2

   $dic.Item($aSR[$i]) =$dic.Item($aSR[$i])+$aSR[$i+1]

Next
$arr=$dic.keys
For $i=0 To UBound($arr)-1
      $sOut=$sOut&$arr[$i]&@tab&$dic($arr[$i])&@CRLF
Next


MsgBox(0, "", $sOut)

楼上的代码,也可以这么写
不过不管怎么样,还是没有A版的代码效率高

ooxxgod 发表于 2012-6-10 23:42:00

真看不懂做什么

kevinch 发表于 2012-6-11 09:44:23

回复 19# gto250
如果是vb中运行,第一次会慢,第二次开始,就会直接引用系统中已经存在的对应项目,效率就相当高了,估计是不是au3中并不存在类似机制,每次都重新建立字典项目,造成了效率降低,如果有很多数据的话倒是可以测试一下

happytc 发表于 2012-6-11 11:04:44

回复 16# binghc

用au3调用SQLite来真正使用Hash表来做这种事吧

的确hash表处理这种事是非常好用和快捷的。还不会因为数据量太大有CPU100%内存1G这种事发生
页: 1 [2]
查看完整版本: 怎么合并计算,或者编程思路?