以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 多列表数据提取不重复值及计数 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=121926) |
-- 作者:ZJZK2018 -- 发布时间:2018/7/15 23:55:00 -- 多列表数据提取不重复值及计数 我的需求是: 1、提取列名中有“市内入围编号_”中的所有不重复的值 2、计算出上面提取的不重复值的个数 3、如何把“市外入围编号”录入进来,谢谢 老师下面这代码有没有办法优化:
Dim dtb As DataTable = DataTables("抽签入围") \'提取表 Dim tb As Table = Tables("抽签入围台帐_Table2") \'接收表 \'\'\'\'=======清除原有所有数据行====== For i As Integer = tb.Rows.Count -1 To 0 Step -1 tb.Rows(i).Delete() Next
\'\'===========多列数据中提取不重复的值============ Dim lst As New List(Of Integer) For Each dc
As DataCol In dtb.DataCols If dc.Name.StartsWith("市内入围编号_")
Then For Each dr As DataRow In dtb.DataRows If dr(dc.Name) > 0 AndAlso lst.Contains(dr(dc.Name)) = False Then lst.Add(dr(dc.Name)) End If Next End If Next \'msgbox(Integer.Join("|",
lst.ToArray)) Dim ndr As Row For Each bh As String In lst \'遍历集合所有数据 ndr = tb.AddNew() ndr("市内_入围编号")
= bh \' CInt(n.Trim("内")) Next
\'\'\'\'========提取球号出现次数======== For Each rw As Row In tb.Rows If rw.IsNull("市内_入围编号")
Then rw("市内_次数")
= Nothing Else Dim cnt As Integer = 0 For Each dc As DataCol In dtb.DataCols If dc.Name.StartsWith("市内入围编号_") Then For Each dr As DataRow In dtb.DataRows
If rw("市内_入围编号") = dr(dc.Name) Then
cnt += 1 End
If Next rw("市内_次数") = cnt End
If Next End If Next
[此贴子已经被作者于2018/7/16 0:30:18编辑过]
|
-- 作者:有点甜 -- 发布时间:2018/7/16 9:12:00 -- 代码已经没有优化的空间了。如果数据多,慢,请看看
http://www.foxtable.com/webhelp/scr/0453.htm
http://www.foxtable.com/webhelp/scr/2218.htm
|
-- 作者:ZJZK2018 -- 发布时间:2018/7/16 10:36:00 -- \'\'===========多列数据中提取不重复的值============ Dim lst As New List(Of Integer) For Each dc As DataCol In dtb.DataCols If dc.Name.StartsWith("市内入围编号_") Then For Each dr As DataRow In dtb.DataRows If dr(dc.Name) > 0 AndAlso lst.Contains(dr(dc.Name)) = False Then lst.Add(dr(dc.Name)) End If Next End If Next msgbox(Integer.Join("|", lst.ToArray)) 上面代码中写入“Integer”出错,写入“string”又是对的,请问整数型如何处理? |
-- 作者:有点甜 -- 发布时间:2018/7/16 10:55:00 -- 回复楼上,只有string才有join的功能,integer类型没有。
使用string类型和integer类型,效率上相差无几的。如果确实要用integer,你可以在循环的过程中,用一个变量把各个值组合起来最后显示变量。 |
-- 作者:ZJZK2018 -- 发布时间:2018/7/16 11:18:00 -- 老师你好: 还有一个问题,1楼仅是“市内入围编号”的提取,但提取“市外入围编号”后,我不想新增行而是直接填入到“市外_入围编号”列中(从第一行开始)这段代码如何调整?谢谢 |
-- 作者:有点甜 -- 发布时间:2018/7/16 11:28:00 -- 以下是引用ZJZK2018在2018/7/16 11:18:00的发言:
老师你好: 还有一个问题,1楼仅是“市内入围编号”的提取,但提取“市外入围编号”后,我不想新增行而是直接填入到“市外_入围编号”列中(从第一行开始)这段代码如何调整?谢谢
1、添加足够多的行
Dim n = lst.count-tb.rows.count If n > 0 Then tb.AddNew(n)
2、循环每一行赋值
For i as integer = 0 to lst.count-1 ndr = tb.rows(i) ndr("市内_入围编号") = lst(i) Next |