Foxtable(狐表)用户栏目专家坐堂 → [求助]字符串中去重复的问题


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

主题:[求助]字符串中去重复的问题

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


加好友 发短信
等级:六尾狐 帖子:1309 积分:9501 威望:0 精华:0 注册:2015/6/30 8:46:00
[求助]字符串中去重复的问题  发帖心情 Post By:2020/7/8 13:47:00 [只看该作者]

数据库中的C列有以下内容

A|B|C

B|C|D

C|B|E

代码~~~~~~~~~~~~~~~~~~~~~

                cmd.CommandText = "SEL ECT DISTINCT C From {CCC}"
                Dim sdt As DataTable = cmd.ExecuteReader()               
                cb.ComboList = sdt.GetComboListString("C","","C")

 

得到的数据是A|B|C|B|C|D|C|B|E

下拉时有重复,如何去重。

想得到的去重后的数据A|B|C|D|E


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


加好友 发短信
等级:超级版主 帖子:105903 积分:538578 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/8 13:59:00 [只看该作者]

dim lst as new list(of string)
for each s as string in sdt.Gevalues("C")
if lst.contains(s) = false then lst.add(s)
next
lst.sort
cb.ComboList = string.join("|",lst.toarray())

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


加好友 发短信
等级:六尾狐 帖子:1309 积分:9501 威望:0 精华:0 注册:2015/6/30 8:46:00
  发帖心情 Post By:2020/7/8 14:49:00 [只看该作者]

以下是引用有点蓝在2020/7/8 13:59:00的发言:
dim lst as new list(of string)
for each s as string in sdt.Gevalues("C")
if lst.contains(s) = false then lst.add(s)
next
lst.sort
cb.ComboList = string.join("|",lst.toarray())

 

测试不对,还是有重复的。

加调试代码,弹出提示框都是99,没有去重,循环中的Lst增加

dim lst as new list(of string)

MessageBox.Show(sdt.GetValues("C").Count)

 

for each s as string in sdt.Gevalues("C")
if lst.contains(s) = false then lst.add(s)
next
 
lst.sort
MessageBox.Show(lst.Count)
cb.ComboList = string.join("|",lst.toarray())

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


加好友 发短信
等级:六尾狐 帖子:1309 积分:9501 威望:0 精华:0 注册:2015/6/30 8:46:00
  发帖心情 Post By:2020/7/8 14:51:00 [只看该作者]

换个方法可以解决;但效率不高!有没有更快捷的方法

 

cmd.CommandText = "SELEC T DISTINCT C From {CCC}"
sdt = cmd.ExecuteReader()
Dim vss As String = sdt.GetComboListString("C","","C")
Dim cbs As String
Dim i As Integer

MessageBox.Show(vss.Split("|").Length) 弹出有2000多个,
For Each s As String In vss.Split("|")
    If cbs > "" Then
        If cbs.Contains(s) = False Then    cbs &= "|" & s
    Else
        cbs = s
    End If
Next
e.Form.Controls("Com").ComboList = cbs


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


加好友 发短信
等级:超级版主 帖子:105903 积分:538578 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/7/8 15:08:00 [只看该作者]

没有快捷方法,只能遍历处理

dim lst as new list(of string)
for each s as string in sdt.GetComboListString("C").split("|")
if lst.contains(s) = false then lst.add(s)
next
lst.sort
cb.ComboList = string.join("|",lst.toarray())


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


加好友 发短信
等级:狐神 帖子:4627 积分:33767 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2020/7/8 16:06:00 [只看该作者]

cmd.CommandText = "SELEC T DISTINCT C From {CCC}"
sdt = cmd.ExecuteReader()
Dim vss As String = sdt.GetComboListString("C","","C")
Output.Show(String.join(",",vss.split("|").Distinct.ToArray))

 回到顶部