Foxtable(狐表)用户栏目专家坐堂 → 多列表数据提取不重复值及计数


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

主题:多列表数据提取不重复值及计数

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


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
多列表数据提取不重复值及计数  发帖心情 Post By: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



此主题相关图片如下:qq截图20180715235438.png
按此在新窗口浏览图片



此主题相关图片如下:235535.png
按此在新窗口浏览图片


[此贴子已经被作者于2018/7/16 0:30:18编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/7/16 9:12:00 [只看该作者]

代码已经没有优化的空间了。如果数据多,慢,请看看

 

http://www.foxtable.com/webhelp/scr/0453.htm

 

http://www.foxtable.com/webhelp/scr/2218.htm

 


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


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By: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”又是对的,请问整数型如何处理?


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/7/16 10:55:00 [只看该作者]

回复楼上,只有string才有join的功能,integer类型没有。

 

使用string类型和integer类型,效率上相差无几的。如果确实要用integer,你可以在循环的过程中,用一个变量把各个值组合起来最后显示变量。


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


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2018/7/16 11:18:00 [只看该作者]

老师你好:
还有一个问题,1楼仅是“市内入围编号”的提取,但提取“市外入围编号”后,我不想新增行而是直接填入到“市外_入围编号”列中(从第一行开始)这段代码如何调整?谢谢


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By: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


 回到顶部