#include <array.au3>
local $array
for $i=0 to 99
$array[$i]=ChrW(Random(19968,40869,1))&ChrW(Random(19968,40869,1))&ChrW(Random(19968,40869,1))
$array[$i]=Random(1,100,1)
Next
_ArrayDisplay($array)
$k=UBound($array)-1
Global $newarray
Dim $n=0
for $i=$k to 0 step -1
if $array[$i]>60 Then
$newarray[$n]=$array[$i]
$newarray[$n]=$array[$i]
$n+=1
EndIf
Next
If $K<>$n Then
For $i=$k To $n Step -1
_ArrayDelete($newarray,$i)
Next
EndIf
_ArrayDisplay($newarray)
修改了一下 本帖最后由 3mile 于 2011-6-22 19:40 编辑
回复kk_lee69
3mile也没有搞明白for循环时“起止变量”的内部用法
的确不需要那两行
happytc 发表于 2011-6-22 13:55 http://www.autoitx.com/images/common/back.gif
回复3mile
三笑,这样是不是多算了一步,虽说影响不大,但如果100个成绩都小于60,岂不是要循环计算200次(我 ...
netegg 发表于 2011-6-22 19:06 http://www.autoitx.com/images/common/back.gif
既然蛋蛋兄问起,我来解释一下我的想法吧.
顺便修正一下错误.我在8楼的代码只考虑了最后一个数据小于60的情况,但没有考虑最后几组数小于60的情况.
#include <array.au3>
local $array
for $i=0 to 99
$array[$i]=ChrW(Random(19968,40869,1))&ChrW(Random(19968,40869,1))&ChrW(Random(19968,40869,1))
$array[$i]=Random(1,100,1)
Next
_ArrayDisplay($array)
;Local $Array = [["張三", 42], ["李四", 64], ["王五", 44], ["劉六", 34], ["林七", 58]]
for $i=UBound($array)-1 to 0 step -1
;$k=UBound($array)-1
if $array[$i]<60 Then
_ArrayDelete($array,$i)
if $i<UBound($array)-1 Then $i+=1
EndIf
Next
if UBound($array)=0 then
msgbox(0,0,"居然没有及格的?")
Else
_ArrayDisplay($array)
EndIf
为什么要在这里加一行IF $i<UBound($array)-1 then $i+=1呢?
假设数组为$Array = [["張三", 42], ["李四", 51], ["王五", 65], ["劉六", 34], ["林七", 58]]
最后一个数 林七 58分 小于60,但如果不理会先删除数组4号元素后,直接$i+1,此时$i=5,进入循环时$i由于step -1此时又成了4,再判断的是4号元素.可4号元素已经删除,此时直接数组溢出了.
由此推论,happytc兄在5楼中的ArrayDelete()的使用是错误的.另请问一下,什么叫"起止变量"?
关于蛋蛋兄所说的效率问题,的确会多进行N次循环,但不是简单的UBound($array)/2次.等同于回塑一个单位.
解释完毕.语文不好,可能解释不是很清楚.见谅! 回复 17# 3mile
三笑,其实我是一直就没搞明白楼主所说的结构到底指的是什么,不知道是不是和原来的顺序有关系 回复 18# netegg
呵呵,我想应该是指的数组的索引吧.
如果不是指的这个,那么楼上所有的回答全都错了. 本帖最后由 netegg 于 2011-6-22 20:16 编辑
回复 19# 3mile
可是,回过头想想,不对呀,删除了元素,索引不变,难道留空?估计不是索引,估计最大可能应该是顺序
(蛋蛋yy下,要个乱序的数组做什么?) 回复 20# netegg
呵呵,蛋蛋兄厉害.
这个办法好.先留空,再删除所有空数据.两组循环而已,如果数据量不大的情况下几乎对效率没有影响. 我說的 結構改變指的就是 索引改變 .....因為我試著用 _ArrayDelete 去刪除一行.....
結果那一行以下的資料索引值 全部少 1索引值改變了 本帖最后由 netegg 于 2011-6-24 18:07 编辑
#include <Array.au3>
Dim $Array = [["張三", 85], ["李四", 51], ["王五", 65], ["劉六", 34], ["林七", 98]]
Dim $Brray
Dim $j = 0
For $i = 0 To UBound($Array)-1
If $Array[$i] > 60 Then
$Brray[$j] = $Array[$i]
$Brray[$j] = $Array[$i]
$j+=1
EndIf
Next
$index = _ArraySearch($Brray, '', 0, 0, 0, 0, 1)
ReDim $Brray[$index]
$Array=$Brray
$Brray=0
_arraydisplay($Array, ' ')和love5173的差不多
另外,lz还是再说明下吧
姓名 成績
張三 85
李四 51
王五 65
劉六 34
林七 98
最后到底要什么样的结果
姓名 成績
張三 85
王五 65
林七 98
是这样,还是(这种情况没可能)
姓名 成績
張三 85
王五 65
林七 98
亦或是
姓名 成績
張三 85
王五 65
林七 98
这样 回复 15# love5173
和我想的一样,建立一个新的数组,如果符合新的数据,就写到新的数组里面,,不知道这样的效果会怎样 回复 23# netegg
蛋兄,,你的想的真多,佩服
页:
1
[2]