找回密码
 加入
搜索
查看: 1498|回复: 6

[网络通信] [已解决]一个循环问题,求简洁效率算法

[复制链接]
发表于 2020-2-22 08:35:49 | 显示全部楼层 |阅读模式
本帖最后由 elexy 于 2020-2-23 07:34 编辑
#include <array.au3>

Local $all[21] = [967, 843, 717, 654, 458, 738, 231, 172, 401, 748, 557, 520, 148, 342, 166, 321, 498, 671, 162, 367, 987]  ;举例21个数,实际很多

Dim $req[UBound($all)][2]

For $i = 0 To UBound($all) - 1 Step 1
        If StringLeft($all[$i], 1) > 3 Then
                $req[$i][0] = 1
        Else
                $req[$i][0] = 0
        EndIf
        $req[$i][1] = $all[$i]
Next
_ArrayDisplay($req) ;数组显示

MsgBox(0,"分批循环显示,每次最多显示5个数","?");举例21,正确答案要显示5次,求简洁效率算法

发表于 2020-2-22 15:51:04 | 显示全部楼层
本帖最后由 gto250 于 2020-2-22 15:52 编辑
#include <array.au3>

Local $all[21] = [967, 843, 717, 654, 458, 738, 231, 172, 401, 748, 557, 520, 148, 342, 166, 321, 498, 671, 162, 367, 987]  ;举例21个数,实际很多


Dim $req[1]
For $i = 0 To UBound($all) - 1  Step 1 
        If StringLeft($all[$i], 1) > 3 Then
                $num=UBound($req)
                ReDim $req[$num+1]
                $req[$num] =$all[$i]
        EndIf
Next
_ArrayDisplay($req)
For $ii=1 To UBound($req)-1 Step 5
        _ArrayDisplay($req,"显示"&$ii&":"&$ii+4,$ii&":"&$ii+4)
Next        
发表于 2020-2-22 23:21:54 | 显示全部楼层
先就:StringLeft 谈个人感觉,应该不如直接的数据大小比较来得快…………
代码测试一下:
#include <array.au3>
$Num_test = 21
Dim $all[$Num_test]
For $i = 0 To $Num_test - 1
        $all[$i] = Random(100, 999, 1)
Next
;~ _ArrayDisplay($all)

;方法1:StringLeft
Dim $req[UBound($all)][2]
$time = TimerInit()
For $i = 0 To UBound($all) - 1 Step 1
        If StringLeft($all[$i], 1) > 3 Then
                $req[$i][0] = 1
        Else
                $req[$i][0] = 0
        EndIf
        $req[$i][1] = $all[$i]
Next
ConsoleWrite(@ScriptLineNumber & ':' & 'StringLeft 1: Vs : cost:' & Round(TimerDiff($time),3) & '毫秒' & @CRLF)

;方法2:>直接数值大小进行比较
Dim $req[UBound($all)][2]
$time = TimerInit()
For $i = 0 To UBound($all) - 1 Step 1
        If $all[$i] > 399 Then
                $req[$i][0] = 1
        Else
                $req[$i][0] = 0
        EndIf
        $req[$i][1] = $all[$i]
Next
ConsoleWrite(@ScriptLineNumber & ':' & 'Value Vs :cost:' &Round(TimerDiff($time),3) & '毫秒' & @CRLF)
发表于 2020-2-22 23:24:38 | 显示全部楼层
>运行:(3.3.7.15):D:\autoit3\参考资料\AutoIt(AU3) v3.3.7.15 汉化绿色版\autoit3\autoit3_x64.exe "C:\Users\Administrator\Desktop\t2.au3"   
20:StringLeft 1: Vs : cost:0.269毫秒
33:Value Vs :cost:0.131毫秒

较真起来的话,$all[$i] > 399 的写法是比 StringLeft($all[$i], 1) > 3要快一些,故:接下来的代码直接进行数据比较
发表于 2020-2-22 23:32:34 | 显示全部楼层
借用2楼论坛元老gto250的     For $ii=0 To UBound($all) - 1 Step 5    中的 step5 的写法,稍作改动:
;~ #include <array.au3>
$Num_test = 21
Dim $all[$Num_test]
For $i = 0 To $Num_test - 1
        $all[$i] = Random(100, 999, 1)
Next
;~ _ArrayDisplay($all)

Dim $req[UBound($all)][2]
;~ $time = TimerInit()
For $i = 0 To UBound($all) - 1 Step 1
        If $all[$i] > 399 Then
                $req[$i][0] = 1
        Else
                $req[$i][0] = 0
        EndIf
        $req[$i][1] = $all[$i]
Next
;~ ConsoleWrite(@ScriptLineNumber & ':' & 'Value Vs :cost:' &Round(TimerDiff($time),3) & '毫秒' & @CRLF)

For $ii = 0 To UBound($all) - 1 Step 5
        $content = '';每次循环显示的内容
        $pici = Ceiling(($ii + 1) / 5);循环显示的批次
        ConsoleWrite(@ScriptLineNumber & ') : $pici = ' & $pici & @CRLF)
        For $j = 0 To 4
                If $ii + $j < UBound($all) Then $content &= $req[$ii + $j][0] & @TAB & $req[$ii + $j][1] & @CRLF
        Next
        ConsoleWrite(@ScriptLineNumber & ') : $content = ' & @CRLF & $content & @CRLF)
Next

发表于 2020-2-22 23:36:16 | 显示全部楼层
本帖最后由 floor6ggg 于 2020-2-22 23:40 编辑

自己更改:$Num_test = 21 的数值进行测试。。。。
没有用数组显示,直接在控制台查看输出结果信息
发表于 2020-2-23 00:25:12 | 显示全部楼层
不用console,
数组法显示结果: 直接参照 2楼论坛元老gto250的     For $ii=0 To UBound($all) - 1 Step 5    中的 step5 的写法
#include <array.au3>
$Num_test = 21
Dim $all[$Num_test]
For $i = 0 To $Num_test - 1
        $all[$i] = Random(100, 999, 1)
Next
;~ _ArrayDisplay($all)

Dim $req[UBound($all)][2]
;~ $time = TimerInit()
For $i = 0 To UBound($all) - 1 Step 1
        If $all[$i] > 399 Then
                $req[$i][0] = 1
        Else
                $req[$i][0] = 0
        EndIf
        $req[$i][1] = $all[$i]
Next
;~ ConsoleWrite(@ScriptLineNumber & ':' & 'Value Vs :cost:' &Round(TimerDiff($time),3) & '毫秒' & @CRLF)

For $ii=0 To UBound($req)-1 Step 5
        _ArrayDisplay($req,"显示"&$ii&":"&$ii+4,$ii&":"&$ii+4)
Next
发表于 2020-2-23 00:57:17 | 显示全部楼层
本帖最后由 floor6ggg 于 2020-2-23 00:59 编辑

好吧,仅显示400以上数值的话,2楼论坛元老gto250是正解,我承认我就是来打酱油水贴混积分的………………我把所有的数值都显示了
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 08:37 , Processed in 0.075029 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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