关于优化循环

a_aaaa8888 2009-05-04 11:29:05

For ii = 0 To Form9.List1.ListCount - 1
str = Form9.List1.List(ii)
sz = Split(str, ",")
st = sz(0)
Form9.List1.ListIndex = ii
si(0) = st Mod 10
si(1) = (st \ 10) Mod 10
si(2) = (st \ 100) Mod 10
si(3) = IIf(si(0) >= si(1), IIf(si(0) >= si(2), si(0), si(2)), IIf(si(1) >= si(2), si(1), si(2)))
si(4) = IIf(si(0) <= si(1), IIf(si(0) <= si(2), si(0), si(2)), IIf(si(1) <= si(2), si(1), si(2)))
si(5) = (si(0) Mod 2) + (si(1) Mod 2) + (si(2) Mod 2)
si(6) = IIf(si(0) >= 5, 1, 0) + IIf(si(1) >= 5, 1, 0) + IIf(si(2) >= 5, 1, 0)
si(7) = fq(st)
si(8) = fw(st)
si(9) = si(0) + si(1) + si(2)
si(10) = si(3) - si(4)
si(11) = si(9) - si(3) - si(4)
si(12) = si(3) + si(11) - si(4)
si(13) = si(11) + si(4)
si(14) = fi(st)
si(15) = fr(st)
si(16) = fq(st) - (si(9) - fq(st))
If Form9.Check1(0).Value = 1 Then mi(0) = si(7)
If Form9.Check1(1).Value = 1 Then mi(1) = si(8)
If Form9.Check1(2).Value = 1 Then mi(2) = si(16)
If Form9.Check1(3).Value = 1 Then mi(3) = si(9)
If Form9.Check1(4).Value = 1 Then mi(4) = si(10)
If Form9.Check1(5).Value = 1 Then mi(5) = si(11)
If Form9.Check1(6).Value = 1 Then mi(6) = si(12)
If Form9.Check1(7).Value = 1 Then mi(7) = si(13)
If Form9.Check1(8).Value = 1 Then mi(8) = si(14)
If Form9.Check1(9).Value = 1 Then mi(9) = si(15)
If Form9.Check1(10).Value = 1 Then mi(10) = si(5)
If Form9.Check1(11).Value = 1 Then mi(11) = si(6)
For i = MSFlexGrid1.Rows - 1 To 1 Step -1
bb = MSFlexGrid1.TextMatrix(i, 1)
si(0) = bb Mod 10
si(1) = (bb \ 10) Mod 10
si(2) = (bb \ 100) Mod 10
si(3) = IIf(si(0) >= si(1), IIf(si(0) >= si(2), si(0), si(2)), IIf(si(1) >= si(2), si(1), si(2)))
si(4) = IIf(si(0) <= si(1), IIf(si(0) <= si(2), si(0), si(2)), IIf(si(1) <= si(2), si(1), si(2)))
ww(10) = (si(0) Mod 2) + (si(1) Mod 2) + (si(2) Mod 2)
ww(11) = IIf(si(0) >= 5, 1, 0) + IIf(si(1) >= 5, 1, 0) + IIf(si(2) >= 5, 1, 0)
ww(0) = fq(bb)
ww(1) = fw(bb)
ww(3) = si(0) + si(1) + si(2)
ww(4) = si(3) - si(4)
ww(5) = ww(3) - si(3) - si(4)
ww(6) = si(3) + ww(5) - si(4)
ww(7) = ww(5) + si(4)
ww(8) = fi(bb)
ww(9) = fr(bb)
ww(2) = fq(bb) - (ww(3) - fq(bb))
If Form9.Option1(0) = True And Form9.Option2(0) = True Then
b = False
For dd = 0 To 11
If Form9.Check1(dd).Value = 1 Then
If ww(dd) = mi(dd) And Form9.Check1(dd).Value Then b = True
End If
Next
If b = True Then
MSFlexGrid1.RemoveItem i
End If
End If
If Form9.Option1(0) = True And Form9.Option2(1) = True Then
bCanRemove = True
For dda = 0 To Form9.Check1.UBound

If Form9.Check1(dda).Value = vbChecked Then
If ww(dda) = mi(dda) Then
bCanRemove = False
Exit For
End If
End If
Next
If bCanRemove Then MSFlexGrid1.RemoveItem i
End If

If Form9.Option1(2) = True And Form9.Option2(0) = True Then 现在慢
fff = False
For dd = 0 To 11
For j = dd + 1 To 11
For n = j + 1 To 11
If Form9.Check1(dd).Value = 1 And Form9.Check1(j).Value = 1 And Form9.Check1(n).Value = 1 Then
d = ww(dd) <> mi(dd)
c = ww(j) <> mi(j)
k = ww(n) <> mi(n)
b = Not (d Or c Or k)

If b And Form9.Check1(dd).Value Then fff = True

End If
Next
Next
Next

If fff = True Then
MSFlexGrid1.RemoveItem i
End If
End If

If Form9.Option1(2) = True And Form9.Option2(1) = True Then 现在慢
fff = False
For dd = 0 To 11
For j = dd + 1 To 11

For n = j + 1 To 11
If Form9.Check1(dd).Value = 1 And Form9.Check1(j).Value = 1 And Form9.Check1(n).Value = 1 Then
d = ww(dd) <> mi(dd)
c = ww(j) <> mi(j)
k = ww(n) <> mi(n)
b = Not (d Or c Or k)

If b And Form9.Check1(dd).Value Then fff = True

End If
Next
Next
Next

If fff = False Then
MSFlexGrid1.RemoveItem i
End If
End If

Next
Next


最后面,有两个慢的,他俩本身就3个循环,加上两个大的循环共是5个,这样很慢,如何能减少循环
...全文
45 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
a_aaaa8888 2009-05-05
  • 打赏
  • 举报
回复
该如何搞呢

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧