Foxtable(狐表)用户栏目专家坐堂 → 同列中不同行的差


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

主题:同列中不同行的差

帅哥,在线噢!
有点蓝
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110495 积分:562359 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/11/10 21:24:00 [显示全部帖子]

没看懂【第三列中行与行之间差相等的数据(行间隔相同)】是什么意思,以上面数据为例说明一下

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110495 积分:562359 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/11/10 22:36:00 [显示全部帖子]

Dim t As Table = Tables("表A")
Dim c As Integer = t.Rows.Count - 1
Dim dict As new Dictionary(of Integer,List(of Integer))
Dim idx As Integer = 0
For i As Integer = 1 To c
    dict.Clear
    For k As Integer = 0 To c
        If k + i < c
            Dim d As Integer = t.Rows(k+i)("第三列") - t.Rows(k)("第三列")
            If d > 0
                If dict.ContainsKey(d) Then
                    dict(d).add(k)
                    dict(d).add(k+i)
                Else
                    Dim lst As new List(of Integer)
                    lst.add(k)
                    lst.add(k+i)
                    dict.Add(d,lst)
                End If
            End If
        End If
    Next
    For Each key As Integer In dict.Keys
        If dict(key).count > 2 Then
            Output.Show(key & "-----")
            For Each m As Integer In dict(key)
                Output.Show(m)
                Dim r As Row = t.Rows(idx)
                Dim r2 As Row = t.Rows(m)
                r("第四列") = r2("第二列")
                r("第五列") = r2("第三列")
                idx += 1
            Next
        End If
    Next
Next

 回到顶部
帅哥,在线噢!
有点蓝
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110495 积分:562359 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/11/12 15:17:00 [显示全部帖子]

我测试没有问题。

我大概解释一下算法,如果看得懂自行学习一下,如果看不懂,我也没办法了,
Dim t As Table = Tables("表A")
Dim c As Integer = t.Rows.Count - 1
Dim dict As new Dictionary(of Integer,List(of Integer))
Dim idx As Integer = 0
For i As Integer = 1 To c 按间隔遍历,比如间隔1,就是第2行减第1行、第3行减第2行...;比如比如间隔2,就是第3行减第1行、第4行减第2行...;以此类推
    dict.Clear
    For k As Integer = 0 To c '从第一行开始遍历每种间隔的差值
        If k + i < c ‘k+i就是间隔的行,比如间隔i=2,k=0的时候表示第一行,那么k+i=0+2=2就表示是第3行。。。
            Dim d As Integer = t.Rows(k+i)("第三列") - t.Rows(k)("第三列") ’按上面的说法,间隔i=2,k=0的时候,这一句就表示第3行第三列减去第1行第三列的值,
            If d > 0如果差值大于0
                If dict.ContainsKey(d) Then 如果已经记录过这个差值,添加到字典集合中
                    dict(d).add(k)
                    dict(d).add(k+i)
                Else
                    Dim lst As new List(of Integer) 如果没有记录过这个差值,新增集合添加到字典中
                    lst.add(k)
                    lst.add(k+i)
                    dict.Add(d,lst)
                End If
            End If
        End If
    Next
一种间隔遍历完毕
    For Each key As Integer In dict.Keys
        If dict(key).count > 2 Then 判断这个间隔的行中是否有超过2行的差值是一样的
            Output.Show(key & "-----")
            For Each m As Integer In dict(key) 
                Output.Show(m) 如果有超过2行的差值是一样的,显示这些行的行号
                Dim r As Row = t.Rows(idx)
                Dim r2 As Row = t.Rows(m)
                r("第四列") = r2("第二列")
                r("第五列") = r2("第三列")
                idx += 1
            Next
        End If
    Next
Next

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110495 积分:562359 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/11/12 23:19:00 [显示全部帖子]

试试

Dim t As Table = Tables("表A")

Dim c As Integer = t.Rows.Count - 1

Dim dict As new Dictionary(of Integer,List(of Integer))

Dim idx As Integer = 0

For i As Integer = 1 To c
        dict.Clear
        
        For k As Integer = 0 To c
            
            If k + i + i <= c
                
                Dim d As Integer = t.Rows(k+i+i)("第三列") + t.Rows(k+i)("第三列") + t.Rows(k)("第三列")  '改为三个数相加,相隔一行的数据找不出。
                
                If d > 0

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110495 积分:562359 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/11/14 8:56:00 [显示全部帖子]

其它地方相应改改咯
……
            If d > 0
                If dict.ContainsKey(d) Then
                    dict(d).add(k)
                    dict(d).add(k+i)
                    dict(d).add(k+i+i)
                Else
                    Dim lst As new List(of Integer)
                    lst.add(k)
                    lst.add(k+i)
                    lst.add(k+i+i)
                    dict.Add(d,lst)
                End If
            End If
        End If
    Next
    For Each key As Integer In dict.Keys
        If dict(key).count > 3 Then
……

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110495 积分:562359 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/11/16 10:59:00 [显示全部帖子]

搞不定

 回到顶部