回复 6# afan
一直用 Assign Eval IsDeclared 组合模拟哈希,计算楼主这样的问题挺爽,但始终没真正的哈希好用{:face (197):} 回复 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) 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)广开思路吧 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版的代码效率高 真看不懂做什么 回复 19# gto250
如果是vb中运行,第一次会慢,第二次开始,就会直接引用系统中已经存在的对应项目,效率就相当高了,估计是不是au3中并不存在类似机制,每次都重新建立字典项目,造成了效率降低,如果有很多数据的话倒是可以测试一下 回复 16# binghc
用au3调用SQLite来真正使用Hash表来做这种事吧
的确hash表处理这种事是非常好用和快捷的。还不会因为数据量太大有CPU100%内存1G这种事发生
页:
1
[2]