一个求随机排序的思路征集

netspies 2008-11-05 02:16:26
有1000条数据,需要随机排序,效果象电视上的抽取电话号码一样,进行滚屏显示.

一个开始键,点击后开始滚动,点结束停止.
有一个要求,要随机,并且点结束的时间不同而排序的结果也会不同.

我想通过随机排序,然后每10秒进行刷新,但是好象比较卡,每次Retrieve()后,会比较停顿,有点卡,效果不好.

请大家多给点思路.
...全文
210 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dj130 2009-03-03
  • 打赏
  • 举报
回复
谢谢
Methodor 2008-11-06
  • 打赏
  • 举报
回复
不必反复retrieve,1次即可....
随机功能利用rand函数....


dyf0130 2008-11-06
  • 打赏
  • 举报
回复
把你的 有1000条数据,放到内存里,随机找1条+到mle_1.Text(加过的别加了)
全+完了,在从新加,
点停的时候,选最后1行的内容
dyf0130 2008-11-06
  • 打赏
  • 举报
回复
往mle_1写

//====================================================================
// 事件: w_1::Declare Instance Variables()
//--------------------------------------------------------------------
// 描述:
//--------------------------------------------------------------------
// 参数:(无)
//--------------------------------------------------------------------
// 返回值: (none)
//--------------------------------------------------------------------
// 作者: 董旭江 日期: 2008.11.06
//--------------------------------------------------------------------
// 修改历史:
//
//====================================================================
int ii_1=0



//====================================================================
// 事件: cb_8::clicked()
//--------------------------------------------------------------------
// 描述: 滚动
//--------------------------------------------------------------------
// 参数:(无)
//--------------------------------------------------------------------
// 返回值: long
//--------------------------------------------------------------------
// 作者: 董旭江 日期: 2008.11.06
//--------------------------------------------------------------------
// 修改历史:
//
//====================================================================

long i
for i=1 to 200000
mle_1.Text = mle_1.Text + "ls_log_msg" +"~r~n"
mle_1.Scroll(2147483647)
Yield()
if ii_1=1 then
messagebox("","ok")
exit
else

end if
next

//====================================================================
// 事件: cb_12::clicked()
//--------------------------------------------------------------------
// 描述: 停
//--------------------------------------------------------------------
// 参数:(无)
//--------------------------------------------------------------------
// 返回值: long
//--------------------------------------------------------------------
// 作者: 董旭江 日期: 2008.11.06
//--------------------------------------------------------------------
// 修改历史:
//
//====================================================================
ii_1=1
liubocy 2008-11-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 liubocy 的回复:]
呵呵,想到个另类的实现方法:

窗口中sle_1,cb_1

实例变量:
boolean ibo_flag = true
long il_row

timer事件:
IF il_row = 1000 THEN
il_row = 1
ELSE
il_row ++
END IF
sle_1.text = string(il_row)
IF ibo_flag THEN timer(0)

cb_1:
IF ibo_flag THEN
ibo_flag = false
timer(0.001)
ELSE
ibo_flag = true
MessageBox( '', String(il_row) )
END IF
[/Quote]

timer事件代码可以改成:
IF ibo_flag THEN
timer(0)
RETURN
END IF
il_row = rand(1000)
sle_1.text = string(il_row)

------------------------------------
这就不存在轮起来慢的问题。
在把sle_1中的值与你dw刷新(open窗口后刷新一次就行)后的行数关联,取出你想要的值。
就可以实现你所说的滚动效果了
liubocy 2008-11-05
  • 打赏
  • 举报
回复
呵呵,想到个另类的实现方法:

窗口中sle_1,cb_1

实例变量:
boolean ibo_flag = true
long il_row

timer事件:
IF il_row = 1000 THEN
il_row = 1
ELSE
il_row ++
END IF
sle_1.text = string(il_row)
IF ibo_flag THEN timer(0)

cb_1:
IF ibo_flag THEN
ibo_flag = false
timer(0.001)
ELSE
ibo_flag = true
MessageBox( '', String(il_row) )
END IF

--------------------------------------------------
1000个轮起来比较慢,不过可以做4个timer,百十个位轮0-9,千位轮0-1。
AFIC 2008-11-05
  • 打赏
  • 举报
回复
1000虽然不多关键是没有必要retrieve,
比如你要产生10个结果,就在1000内产生10个不重复的号码,
然后拷贝到显示用的结果datawindow中,
卡的话你可以看看setredraw能不能管用。
netspies 2008-11-05
  • 打赏
  • 举报
回复
数据量为1000行左右,包括姓名,身份证.
jlwei888 2008-11-05
  • 打赏
  • 举报
回复
可以利用随机数!

可以用随机数做为行数,把数据移到 新DW中!

tchatcha 2008-11-05
  • 打赏
  • 举报
回复
还要具体看你的数据了,排序总有比较,即使是随机的,主要看你的数据了

609

社区成员

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

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