以文本方式查看主题
- Foxtable(狐表) (http://foxtable.net/bbs/index.asp)
-- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2)
---- 关于随机抽取记录问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=144099)
|
-- 作者:迷途小童
-- 发布时间:2019/12/10 21:37:00
-- 关于随机抽取记录问题
假如在题库中抽取100个记录,其中50个是单选题,50个是多选,我想实现抽取20个单选,10个多选,如在单选题中抽取时遇到有2个问的题时,总抽选题数就少1个,保持问题总数为20个,如何实现,请各位专家老师,指点一下,谢谢
Dim cnt As Integer = DataTables("题库").DataRows.Count Dim ids1 As New List(of Integer) Dim ids2 As New List(of Integer) For i As Integer = 0 To cnt -1 ids1.add(i) Next For i As Integer = 0 To cnt - 1 ids2.Add(ids1(rand.Next(0,ids1.count))) Next Tables("题库").StopRedraw() DataTables("题库").ReplaceFor("选择",False) For i As Integer = 0 To args(0) -1 \'100为要抽取的行数 DataTables("题库").DataRows(ids2(i))("选择") = True If Functions.Execute("Q_Number",DataTables("题库").DataRows(ids2(i))("题目内容"),"(?)" ) > 1 Then i += 1 msgbox(i) End If Next Tables("题库").Filter = "[选择] = True" Tables("题库").ResumeRedraw()
|
-- 作者:有点蓝
-- 发布时间:2019/12/10 21:56:00
--
之前已经说过了,这个是一种设计缺陷,使用起来会有很多的麻烦的。
抽取时遇到有2个问的题时就再抽一次,这一次不计入计数中
|
-- 作者:迷途小童
-- 发布时间:2019/12/11 10:30:00
--
我之前听取了你的建议,更改了表结构,原来是把有两个问的拆成两行,抽取时连续两条记录且顺序不能变你说有缺陷我调整了表结构。现在调整后有两个问题的还是保持一行记录,只是要在抽取的时候判断一下抽取的记录是否存在有两个问题,如有两个问我的就少抽取一行。这样也不能实现吗?
|
-- 作者:有点蓝
-- 发布时间:2019/12/11 10:40:00
--
2个问的一般也应该是属于一道题吧?您这是当做2道题来用?那要先搞清楚业务模式,到底是当做一道题来使用,还是2道不同的题。如果说一定要分开成2道题使用,有时候还要合并到一起处理,只能说这题出的.....。这种情况不管使用哪种表结构类型都必须有额外的控制才行了。
您可以在函数里判断有几个问,然后返回同题问题数量解析计数。
|
-- 作者:迷途小童
-- 发布时间:2019/12/11 11:23:00
--
谢谢我实现了,我在选题时,来调整总结数量
\'\'\' Dim cnt As Integer = DataTables("题库").DataRows.Count Dim ids1 As New List(of Integer) Dim ids2 As New List(of Integer) For i As Integer = 0 To cnt -1 ids1.add(i) Next For i As Integer = 0 To cnt - 1 ids2.Add(ids1(rand.Next(0,ids1.count))) Next Tables("题库").StopRedraw() \'DataTables("题库").ReplaceFor("选择",False) DataTables("题库").ReplaceFor("选题",False) DataTables("题库").ReplaceFor("选择","") Dim c As Integer = 10 For i As Integer = 0 To c -1 \'100为要抽取的行数 DataTables("题库").DataRows(ids2(i))("选题") = True If Functions.Execute("Q_Number",DataTables("题库").DataRows(ids2(i))("题目内容"),"(?)" ) > 1 Then c -= 1 \'msgbox(i) End If
Next Tables("题库").Filter = "[选题] = True" Tables("题库").ResumeRedraw()
|