以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  如何避免随机数重复  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=154499)

--  作者:吃亏是福
--  发布时间:2020/9/16 16:02:00
--  如何避免随机数重复
\'我的表格一共3637行,我想实现随机抽取十行,抽取八组,并在表格中显示,为避免随机数重复应该如何调整

For i As Integer = 0 To 7
    Dim ids As String
    Dim lst As new List(of String)
    Dim cnt As Integer = DataTables("订单客户列表").DataRows.Count
    Do
        Dim Id As Integer = rand.Next(0,cnt)
        id = DataTables("订单客户列表").DataRows(id)("_Identify")
        If lst.Contains(id) =False Then
            lst.Add(id)
            Output.Show(id - 2)
        End If
        ids = ids & id & ","
    Loop While lst.count < 10   \'10是要抽取的行数
    Tables("订单客户列表").Filter = "[_Identify] In (" & ids.Trim(",") & ")"
    MessageBox.Show("下一轮")
    Output.Show("下一轮")
Next
[此贴子已经被作者于2020/9/16 18:19:34编辑过]

--  作者:有点蓝
--  发布时间:2020/9/16 16:15:00
--  
参考:http://www.foxtable.com/webhelp/topics/2963.htm
--  作者:吃亏是福
--  发布时间:2020/9/16 18:22:00
--  如何避免随机数重复 ,多谢
如何避免随机数重复  发帖心情 Post By:2020/9/16 16:02:00 [只看该作者]

\'我的表格一共3637行,我想实现随机抽取十行,抽取八组,并在表格中显示,为避免随机数重复应该如何调整

For i As Integer = 0 To 7
    Dim ids As String
    Dim lst As new List(of String)
    Dim cnt As Integer = DataTables("订单客户列表").DataRows.Count
    Do
        Dim Id As Integer = rand.Next(0,cnt)
        id = DataTables("订单客户列表").DataRows(id)("_Identify")
        If lst.Contains(id) =False Then
            lst.Add(id)
            Output.Show(id - 2)
        End If
        ids = ids & id & ","
    Loop While lst.count < 10   \'10是要抽取的行数
    Tables("订单客户列表").Filter = "[_Identify] In (" & ids.Trim(",") & ")"
    MessageBox.Show("下一轮")
    Output.Show("下一轮")
Next

--  作者:有点蓝
--  发布时间:2020/9/17 8:39:00
--  
代码的do循环就是为了避免重复的
--  作者:吃亏是福
--  发布时间:2020/9/17 8:45:00
--  单组使用,是避免重复的,但是一共8轮,还是有重复的
单组使用,是避免重复的,但是一共8轮,8轮叠加之后是有可能是有重复行的
我在外面嵌套了一个循环语句,执行之后,有重复行。
For i As Integer = 0 To 7
    Dim ids As String
    Dim lst As new List(of String)
    Dim cnt As Integer = DataTables("订单客户列表").DataRows.Count
    Do
        Dim Id As Integer = rand.Next(0,cnt)
        id = DataTables("订单客户列表").DataRows(id)("_Identify")
        If lst.Contains(id) =False Then
            lst.Add(id)
            Output.Show(id - 2)
        End If
        ids = ids & id & ","
    Loop While lst.count < 10   \'10是要抽取的行数
    Tables("订单客户列表").Filter = "[_Identify] In (" & ids.Trim(",") & ")"
    MessageBox.Show("下一轮")
    Output.Show("下一轮")
Next
[此贴子已经被作者于2020/9/17 8:46:52编辑过]

--  作者:有点蓝
--  发布时间:2020/9/17 9:28:00
--  
把集合放到外面即可

Dim lst As new List(of String)
For i As Integer = 0 To 7
    Dim ids As String
    Dim cnt As Integer = DataTables("订单客户列表").DataRows.Count
    Do
        Dim Id As Integer = rand.Next(0,cnt)
        id = DataTables("订单客户列表").DataRows(id)("_Identify")
        If lst.Contains(id) =False Then
            lst.Add(id)
            Output.Show(id - 2)
        End If
        ids = ids & id & ","
    Loop While lst.count < 10   \'10是要抽取的行数
    Tables("订单客户列表").Filter = "[_Identify] In (" & ids.Trim(",") & ")"
    MessageBox.Show("下一轮")
    Output.Show("下一轮")
Next