非排序问题,怎么乱序?

dbcontrols 2011-02-10 02:53:38
求ListBox和ListView的乱序算法,不能写硬盘,数据已经添加进去了。
最好有代码,代码的控件名称最好是默认的。
排序就算了。越乱越好。
用途:404
...全文
102 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dianyancao 2011-02-10
  • 打赏
  • 举报
回复
家人怎么不用 老鸟 的线性同余?
无·法 2011-02-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sysdzw 的回复:]
引用 2 楼 dbcontrols 的回复:

给个代码?
引用 1 楼 sysdzw 的回复:
控件中数据先保存到数组中
然后用rnd函数打乱数组元素
最后添加到控件中
VB code
Private Sub Command1_Click()
Dim v, s$, i%, intTmp%

For i = 0 To List1.ListCount - 1
……
[/Quote]这里的ReDim Preserve v(i)可以拿掉,因为再也不会访问到后面的数据了。
无·法 2011-02-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dbcontrols 的回复:]

是数据重复了,不是你代码的问题
正在测试
引用 7 楼 sysdzw 的回复:
引用 5 楼 dbcontrols 的回复:

有重复信息
引用 4 楼 sysdzw 的回复:
引用 2 楼 dbcontrols 的回复:

给个代码?
引用 1 楼 sysdzw 的回复:
控件中数据先保存到数组中
然后用rnd函数打乱数组元素
最后添加到控件中


VB cod……
[/Quote]其实不用数组也行。
从1..n中随机取一个移到list最后
从1..n-1中随机取一个移到list最后
...
Private Sub Command1_Click()
Dim s$, i%, intTmp%

Randomize
For i = List1.ListCount To 0 Step -1
intTmp = Int(Rnd * i)
s = List1.List(intTmp)
List1.RemoveItem intTmp
List1.AddItem s
Next
End Sub
但是数据量大的时候还是用数组好,直接操作控件毕竟效率低。
兔子-顾问 2011-02-10
  • 打赏
  • 举报
回复
用随机数做结果,对数组排序。
dbcontrols 2011-02-10
  • 打赏
  • 举报
回复
是数据重复了,不是你代码的问题
正在测试
[Quote=引用 7 楼 sysdzw 的回复:]
引用 5 楼 dbcontrols 的回复:

有重复信息
引用 4 楼 sysdzw 的回复:
引用 2 楼 dbcontrols 的回复:

给个代码?
引用 1 楼 sysdzw 的回复:
控件中数据先保存到数组中
然后用rnd函数打乱数组元素
最后添加到控件中


VB code
Private Sub Command1_Click()
Dim v, s$, ……
[/Quote]
无·法 2011-02-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 dbcontrols 的回复:]

有重复信息
引用 4 楼 sysdzw 的回复:
引用 2 楼 dbcontrols 的回复:

给个代码?
引用 1 楼 sysdzw 的回复:
控件中数据先保存到数组中
然后用rnd函数打乱数组元素
最后添加到控件中


VB code
Private Sub Command1_Click()
Dim v, s$, i%, intTmp%

For i = 0 ……
[/Quote]什么重复信息?把你数据贴上来看看或者贴个图。
vbman2003 2011-02-10
  • 打赏
  • 举报
回复
一个思路,没严格测试:

Option Explicit

Private Sub Command1_Click()
Dim i As Long, j As Long
Dim ListCount As Long
Dim tmp As String

ListCount = List1.ListCount - 1
Randomize
For i = 0 To ListCount
j = Int((ListCount - i + 1) * Rnd + i)
tmp = List1.List(i)
List1.List(i) = List1.List(j)
List1.List(j) = tmp
Next
End Sub

Private Sub Form_Load()
Dim i As Long
For i = 65 To 90
List1.AddItem Chr(i)
Next
End Sub

dbcontrols 2011-02-10
  • 打赏
  • 举报
回复
有重复信息
[Quote=引用 4 楼 sysdzw 的回复:]
引用 2 楼 dbcontrols 的回复:

给个代码?
引用 1 楼 sysdzw 的回复:
控件中数据先保存到数组中
然后用rnd函数打乱数组元素
最后添加到控件中


VB code
Private Sub Command1_Click()
Dim v, s$, i%, intTmp%

For i = 0 To List1.ListCou……
[/Quote]
无·法 2011-02-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dbcontrols 的回复:]

给个代码?
引用 1 楼 sysdzw 的回复:
控件中数据先保存到数组中
然后用rnd函数打乱数组元素
最后添加到控件中
[/Quote]
Private Sub Command1_Click()
Dim v, s$, i%, intTmp%

For i = 0 To List1.ListCount - 1
s = s & List1.List(i) & vbCrLf
Next
If s = "" Then Exit Sub
s = Left(s, Len(s) - 2)

v = Split(s, vbCrLf)

Randomize
List1.Clear
For i = UBound(v) To 0 Step -1
intTmp = Int(Rnd * i)
List1.AddItem v(intTmp)
v(intTmp) = v(i)
ReDim Preserve v(i)
Next
End Sub
孤独剑_LPZ 2011-02-10
  • 打赏
  • 举报
回复
和抽奖程序没有什么区别
用Randomize 和Rnd得不重复的下标r,List1.list(r)取值
dbcontrols 2011-02-10
  • 打赏
  • 举报
回复
给个代码?
[Quote=引用 1 楼 sysdzw 的回复:]
控件中数据先保存到数组中
然后用rnd函数打乱数组元素
最后添加到控件中
[/Quote]
无·法 2011-02-10
  • 打赏
  • 举报
回复
控件中数据先保存到数组中
然后用rnd函数打乱数组元素
最后添加到控件中

1,451

社区成员

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

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