Foxtable(狐表)用户栏目专家坐堂 → 修改后的getvalues方法肯定有Bug


  共有2711人关注过本帖平板打印复制链接

主题:修改后的getvalues方法肯定有Bug

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


加好友 发短信
等级:小狐 帖子:302 积分:2069 威望:0 精华:0 注册:2017/11/19 9:46:00
  发帖心情 Post By:2021/6/25 8:30:00 [只看该作者]

我研究了一下,据说还是内置字典的查找算法更快,下面用字典做了一个自定义的代替datatable.getvalues的函数。
我测试了一下,结果是正确的,在需要保证可靠性胜过效率的场合建议采用这个函数代替getvalues方法,我的测试是几千行数据的级别,没感觉速度和foxtable getvalues方法有差距,具体耗时希望大家帮忙测试,结果反馈在这里。

函数代码如下,大家可以直接套用。
另外datatable.sqlgetvalues算法的在多列排序的情况下也有bug,上次反馈后还没有修正。
我准备把所有的这些算法都改成自定义函数,避免受到升级的干扰。 
' used to replace the datatable.getvalues method, because foxtable has bugs

Dim DT As DataTable = args(0)
Dim ColName As String = args(1)

Dim FilterStr As String =""
Dim SortStr As String=""

If args.count >2 Then
   FilterStr  =  args(2)
End If

If args.count>3 Then
    SortStr  = args(3)
End If


If DT Is Nothing OrElse ColName=Nothing Then
    Return Nothing
End If

If dt.DataRows.count = 0 Then Return Nothing
'***************************************************************************************************
If SortStr  = ""  Then SortStr = ColName & " asc"  ' default sort ascending
'***************************************************************************************************
'先排序datatable

Dim NDT As system.data.DataTable  = DT.basetable
 

Dim dv = ndt.DefaultView
dv.Rowfilter = filterStr
dv.Sort = sortstr
 
Dim dtCopy As system.data.DataTable = dv.ToTable
'***************************************************************************************************
try
    
    Dim dic As  new Dictionary (of String, Integer) (StringComparer.OrdinalIgnoreCase)  ' ignore case
    
    
    For i As Integer =0 To dtCopy.Rows.count-1
        
        Dim str As String = dtCopy.Rows(i)(ColName)
        If dic.ContainsKey(str) =False Then
            dic.add(str,i)
        End If
        
    Next
    
    Dim Ks As new List  (of String)
    
    For Each kk As String In dic.keys
        ks.add(kk)
    Next
    
    Return ks
    
catch ex As exception
    Return  False  '在上一层触发错误,以便上层catch可以捕捉到
    
End try

[此贴子已经被作者于2021/6/25 9:38:09编辑过]

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