以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  如何count集合中符合某个条件的值的个数  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=153329)

--  作者:刘林
--  发布时间:2020/8/7 8:42:00
--  如何count集合中符合某个条件的值的个数


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


--  作者:y2287958
--  发布时间:2020/8/7 8:43:00
--  
循环呗
--  作者:有点蓝
--  发布时间:2020/8/7 8:44:00
--  
累加呀

dim sum as integer
for i as integer = 0 to 100
if i mod 3 = 0 then
sum += 1
end if
next

msgbox("100以内3的倍数个数:" & sum)

--  作者:刘林
--  发布时间: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的个数


--  作者:有点蓝
--  发布时间:2020/8/7 8:51:00
--  
看3楼,遍历判断,然后累加
--  作者:刘林
--  发布时间: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编辑过]

--  作者:有点蓝
--  发布时间:2020/8/7 9:23:00
--  
反正都已经在遍历了,再加上一个累加而已,不会有效率问题。

Rand.Next(1,5)只能是1~4

--  作者:刘林
--  发布时间: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节能安完),请问如何改

--  作者:有点蓝
--  发布时间:2020/8/7 11:02:00
--  
没看懂这个代码的逻辑,不知道要做什么判断。截图并使用文字说明一下具体要做什么
--  作者:刘林
--  发布时间: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编辑过]