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


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

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

帅哥哟,离线,有人找我吗?
有点蓝
  11楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/8/7 12:03:00 [只看该作者]

排课涉及到比较复杂的算法,反正我感觉基本和图算法差不多,脑袋不够用。

不但要考虑到科目每天要岔开,还要考虑到一个老师可能会教2个班,副科甚至可能会教5个班,要考虑到岔开不同班的排课,有些主科老师可能还兼职副科,.........

所以建议排差不多了,剩下的手工调整吧

 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  12楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/8/7 13:24:00 [只看该作者]

蓝色的部分代码是干什么用的?

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


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

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

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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/8/7 17:16: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 xqs As New Dictionary(Of Integer,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.ContainsKey(xq) = false orelse xqs(xq) < Math.Ceiling(r("节数")/5)
                dr("科目")=r("科目")
                dr("教师姓名")=r("教师姓名")
                i=i+1
if xqs.ContainsKey(xq
xqs(xq) += 1
else
                xqs.Add(xq,1)
end if
            End If
        End If
    Loop
Next

 回到顶部
帅哥哟,离线,有人找我吗?
刘林
  16楼 | 信息 | 搜索 | 邮箱 | 主页 | 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)这个的意义

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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/8/8 8:44:00 [只看该作者]

就是【当天节数小于等于平均日课时的最大整数】,xqs(xq)就是当天节数。

如果死循环,那就是这里的问题,说明一直没有符合条件的数据:
Dim dr As DataRow = DataTables("课程详表").find("班级='" & r("班级") & "' and 星期 = '" & xq & "' and 节次='" & jc & "' and 科目 is null")

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


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

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

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


加好友 发短信
等级:超级版主 帖子:106209 积分:540168 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/8/17 16:58:00 [只看该作者]

我也搞不定

 回到顶部
总数 19 上一页 1 2