以文本方式查看主题

-  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=111231)

--  作者:wenzi187
--  发布时间:2017/12/18 11:19:00
--  [求助]关于随机生成的问题
想达到的效果是,随机选取任意数量(可以选择)的第一列,然后和第二列随意两个进行组合,第三列跟随第一列。得出新的表,表B
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.zip

例如:周一  1、上网 2、打球  刘
        周三  1、锻炼 2、打球  王

可以直接在项目上写代码就行。
这个我试了随机组合,都不得要领。麻烦大师操刀。

--  作者:有点甜
--  发布时间:2017/12/18 11:35:00
--  

参考例子

 

下载信息  [文件大小:316.0 KB  下载次数:37]
图片点击可在新窗口打开查看点击浏览该文件:排列组合.table


--  作者:wenzi187
--  发布时间:2017/12/18 12:23:00
--  
这个我知道,我的意思不是简单的排列组合啊。是生成表B之后,还是要一列一列的。而且有两个随机。
不能组成一句话。在表B里面还是要分别列出来。第一列  周一  周三   第二列  干什么  第三列 谁
简单的排列组合包括随机抽取两行我都知道。怎么融合?


--  作者:有点甜
--  发布时间:2017/12/18 14:32:00
--  
Dim dt As DataTable = DataTables("表A")
Dim drs = dt.Select("第一列 is not null")
For Each dr As DataRow In drs
    Dim ndr As DataRow = DataTables("表B").AddNew
    ndr("第一列") = dr("第一列")
    ndr("第三列") = dr("第三列")
    Dim fdr1 = drs(Rand.Next(0, drs.count))
    Dim fdr2 = drs(Rand.Next(0, drs.count))
    ndr("第二列") = fdr1("第二列") & "," & fdr2("第二列")
Next

--  作者:wenzi187
--  发布时间:2017/12/18 15:00:00
--  
恩?这样也挺机智的,但是这样的组合就有重复值了啊。会出现连续的吃饭吃饭。
--  作者:有点甜
--  发布时间:2017/12/18 15:07:00
--  
Dim dt As DataTable = DataTables("表A")
Dim drs = dt.Select("第一列 is not null")
For Each dr As DataRow In drs
    Dim ndr As DataRow = DataTables("表B").AddNew
    ndr("第一列") = dr("第一列")
    ndr("第三列") = dr("第三列")
    Dim i1 = Rand.Next(0, drs.count)
    Dim i2 = Rand.Next(0, drs.count)
    Do While i1 = i2
        i2 = Rand.Next(0, drs.count)
    Loop
    Dim fdr1 = drs(i1)
    Dim fdr2 = drs(i2)
    ndr("第二列") = fdr1("第二列") & "," & fdr2("第二列")
Next

--  作者:wenzi187
--  发布时间:2017/12/18 17:15:00
--  
如果第一列数量多,第二列数量少,执行代码的时候就会出现这样的情况
图片点击可在新窗口打开查看此主题相关图片如下:qq图片20171218171338.png
图片点击可在新窗口打开查看

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20171218171328.png
图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间:2017/12/18 17:25:00
--  
Dim dt As DataTable = DataTables("表A")
Dim drs = dt.Select("第二列 is not null")
For Each dr As DataRow In dt.Select("第一列 is not null")
    Dim ndr As DataRow = DataTables("表B").AddNew
    ndr("第一列") = dr("第一列")
    ndr("第三列") = dr("第三列")
    Dim i1 = Rand.Next(0, drs.count)
    Dim i2 = Rand.Next(0, drs.count)
    Do While i1 = i2
        i2 = Rand.Next(0, drs.count)
    Loop
    Dim fdr1 = drs(i1)
    Dim fdr2 = drs(i2)
    ndr("第二列") = fdr1("第二列") & "," & fdr2("第二列")
Next

--  作者:wenzi187
--  发布时间:2017/12/19 10:31:00
--  
下面是随机抽取。我大约要抽取2-5行。于是我设定了一个变量R。但是他说从字符串“ & r.text & ”到类型“Double”的转换无效。能看看是哪错了么。

Dim ids As String
Dim lst As new List(of String)
Dim r As WinForm.TextBox = e.Form.Controls("TextBox1")
Dim cnt As Integer = DataTables("表B").DataRows.Count
Do
    Dim Id As Integer = rand.Next(0,cnt)
    id = DataTables("表B").DataRows(id)("_Identify")
    If lst.Contains(id) =False Then
        lst.Add(id)
    End If
    ids = ids & id & ","
Loop While lst.count = " & r.text & "   \'r是要抽取的行数
Tables("表B").Filter = "[_Identify] In (" & ids.Trim(",") & ")"

--  作者:有点甜
--  发布时间:2017/12/19 10:33:00
--  

改成这样

 

Loop While lst.count < val(r.text)