elexy 发表于 2020-2-22 08:35:49

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

本帖最后由 elexy 于 2020-2-23 07:34 编辑

#include <array.au3>

Local $all = ;举例21个数,实际很多

Dim $req

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

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

gto250 发表于 2020-2-22 15:51:04

本帖最后由 gto250 于 2020-2-22 15:52 编辑

#include <array.au3>

Local $all = ;举例21个数,实际很多


Dim $req
For $i = 0 To UBound($all) - 1Step 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      

floor6ggg 发表于 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
$time = TimerInit()
For $i = 0 To UBound($all) - 1 Step 1
        If StringLeft($all[$i], 1) > 3 Then
                $req[$i] = 1
        Else
                $req[$i] = 0
        EndIf
        $req[$i] = $all[$i]
Next
ConsoleWrite(@ScriptLineNumber & ':' & 'StringLeft 1: Vs : cost:' & Round(TimerDiff($time),3) & '毫秒' & @CRLF)

;方法2:>直接数值大小进行比较
Dim $req
$time = TimerInit()
For $i = 0 To UBound($all) - 1 Step 1
        If $all[$i] > 399 Then
                $req[$i] = 1
        Else
                $req[$i] = 0
        EndIf
        $req[$i] = $all[$i]
Next
ConsoleWrite(@ScriptLineNumber & ':' & 'Value Vs :cost:' &Round(TimerDiff($time),3) & '毫秒' & @CRLF)

floor6ggg 发表于 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要快一些,故:接下来的代码直接进行数据比较

floor6ggg 发表于 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
;~ $time = TimerInit()
For $i = 0 To UBound($all) - 1 Step 1
        If $all[$i] > 399 Then
                $req[$i] = 1
        Else
                $req[$i] = 0
        EndIf
        $req[$i] = $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] & @TAB & $req[$ii + $j] & @CRLF
        Next
        ConsoleWrite(@ScriptLineNumber & ') : $content = ' & @CRLF & $content & @CRLF)
Next


floor6ggg 发表于 2020-2-22 23:36:16

本帖最后由 floor6ggg 于 2020-2-22 23:40 编辑

自己更改:$Num_test = 21 的数值进行测试。。。。
没有用数组显示,直接在控制台查看输出结果信息

floor6ggg 发表于 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
;~ $time = TimerInit()
For $i = 0 To UBound($all) - 1 Step 1
        If $all[$i] > 399 Then
                $req[$i] = 1
        Else
                $req[$i] = 0
        EndIf
        $req[$i] = $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

floor6ggg 发表于 2020-2-23 00:57:17

本帖最后由 floor6ggg 于 2020-2-23 00:59 编辑

好吧,仅显示400以上数值的话,2楼论坛元老gto250是正解,我承认我就是来打酱油水贴混积分的………………我把所有的数值都显示了
页: [1]
查看完整版本: [已解决]一个循环问题,求简洁效率算法