Foxtable(狐表)用户栏目专家坐堂 → 如何count集合中符合某个条件的值的个数


  共有3033人关注过本帖树形打印复制链接

主题:如何count集合中符合某个条件的值的个数

帅哥哟,离线,有人找我吗?
刘林
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1936 积分:14844 威望:0 精华:0 注册:2016/4/28 9:58:00
如何count集合中符合某个条件的值的个数  发帖心情 Post By:2020/8/7 8:42:00 [显示全部帖子]


请问老师,如何count集合中符合某个条件的值的个数


 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1936 积分:14844 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/8/7 8:50:00 [显示全部帖子]

Dim xqs As New List(Of integer)

xqs.add(1)

xqs.add(1)

xqs.add(2)

xqs.add(1)

xqs.add(3)

xqs.add(5)

xqs.add(1)


集合增加的值不确定,如统计出集合中为1的个数


 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1936 积分:14844 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/8/7 8:53:00 [显示全部帖子]

我请教的是有不有xqs.count 加个条件来得到,如果用遍历效率会不会很低


Dim tb As Table= Tables("课程安排")
For Each r As Row In tb.Rows
    Dim js As Integer=r("节数")
    Dim i As Integer = 1
    Dim xqs As New List(Of Integer)
    Do While i <= js
        Dim xq As Integer = Rand.Next(1,6)
        Dim jc As Integer = rand.Next(1,8)
        Dim dr As DataRow = DataTables("课程详表").find("班级='" & r("班级") & "' and 星期 = '" & xq & "' and 节次='" & jc & "' and 科目 is null")
        If dr IsNot Nothing
            If xqs.Count....... < Math.Ceiling(r("节数")/5)
                dr("科目")=r("科目")
                dr("教师姓名")=r("教师姓名")
                i=i+1
                xqs.Add(xq)
            End If
        End If
    Loop
Next

我的想法是在某一天安排的某学科不能超过周课时的平均数


另外Rand.Next(1,5)是不是不能得到5,我测试了一下好像没有5产生
[此贴子已经被作者于2020/8/7 8:56:51编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1936 积分:14844 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/8/7 10:59:00 [显示全部帖子]

Dim tb As Table= Tables("课程安排")
For Each r As Row In tb.Rows
    Dim js As Integer=r("节数")
    Dim i As Integer = 1
    Dim values As New List(Of Integer)
    Do While i <= js
        Dim xq As Integer = Rand.Next(1,6)
        Dim jc As Integer = rand.Next(1,8)
        Dim dr As DataRow = DataTables("课程详表").find("班级='" & r("班级") & "' and 星期 = '" & xq & "' and 节次='" & jc & "'")
        If dr IsNot Nothing
            Dim t As Integer=0
           For Each Value As Integer In Values
                If value=xq
                    t=t+1
                End If
            Next
            If t < Math.Ceiling(r("节数")/5)
                dr("科目")=r("科目")
                dr("教师姓名")=r("教师姓名")
                i=i+1
                values.Add(xq)
            End If
        End If
    Loop
Next

老师,这样加了后出现有些学科的节数没安齐,不要这个判断能安齐(一个班每周34节能安完),请问如何改

 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1936 积分:14844 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/8/7 11:47:00 [显示全部帖子]


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



课程安排中已做好一个班有哪些科目,每个科目一周的节数,以上任课老师
课程详表中已有班级星期1-5,1-7节,其中周5只有6节,一个班总的周课时34节,这个在课程安排中已设置好
现在就是将各科总的34节课随机落在课程详表中去,加了集合来判断一天一科有几节课,举例说明一个班数学一周有6节,平均一天1.2,如果星期1安有数学,当天不能超过2节,这样保证不太集中
请问如何是好?



Dim tb As Table= Tables("课程安排")
For Each r As Row In tb.Rows
    Dim js As Integer=r("节数")
    Dim i As Integer = 1
    Dim values As New List(Of Integer)
    Do While i <= js
        Dim xq As Integer = Rand.Next(1,6)
        Dim jc As Integer = rand.Next(1,8)
        Dim dr As DataRow = DataTables("课程详表").find("班级='" & r("班级") & "' and 星期 = '" & xq & "' and 节次='" & jc & "'")
        If dr IsNot Nothing
            Dim t As Integer=0
           For Each Value As Integer In Values
                If value=xq
                    t=t+1
                End If
            Next
            If t < Math.Ceiling(r("节数")/5)
                dr("科目")=r("科目")
                dr("教师姓名")=r("教师姓名")
                i=i+1
                values.Add(xq)
            End If
        End If
    Loop
Next

现在改成这样,判断可能有问题,不能安完
[此贴子已经被作者于2020/8/7 17:07:37编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1936 积分:14844 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/8/7 12:51:00 [显示全部帖子]

我现在就是在考虑差不多的做法,主要是如何将预设的34 节课,随机排下去,现在是没分完,上面的代码错在哪里


Dim tb As Table= Tables("课程安排")
For Each r As Row In tb.Rows
    Dim js As Integer=r("节数")
    Dim i As Integer = 1
    Dim xqs As New List(Of Integer)
    Do While i <= js
        Dim xq As Integer = Rand.Next(1,6)
        Dim jc As Integer = rand.Next(1,8)
        Dim dr As DataRow = DataTables("课程详表").find("班级='" & r("班级") & "' and 星期 = '" & xq & "' and 节次='" & jc & "' and 科目 is null")
        If dr IsNot Nothing
            If xqs.Count....... < Math.Ceiling(r("节数")/5)
                dr("科目")=r("科目")
                dr("教师姓名")=r("教师姓名")
                i=i+1
                xqs.Add(xq)
            End If
        End If
    Loop
Next


不要蓝色的部分可以将34节课安完
[此贴子已经被作者于2020/8/7 12:53:02编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1936 积分:14844 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/8/7 16:52:00 [显示全部帖子]

蓝色代码是用来记录随机抽到的星期几,如抽到是星期1,add到集合中,下一次统计出星期1的有几节课,当天节数小于等于平均日课时的最大整数

 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1936 积分:14844 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/8/7 21:55:00 [显示全部帖子]

老师,这个代码直接死循环了,还有我是想达到如数学周课时6节,平均1.2,也就是一天不能超过2节,上面的代码我没理解到xqs(xq) < Math.Ceiling(r("节数")/5)这个的意义

 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:八尾狐 帖子:1936 积分:14844 威望:0 精华:0 注册:2016/4/28 9:58:00
  发帖心情 Post By:2020/8/17 16:11:00 [显示全部帖子]

老师,请问这个地方如何改才能解决课程大致均衡并实现随机排完

 回到顶部