如果过滤重复内容!

luoshulin 2004-04-08 05:03:42
kimuratakuya
kimuratakuya
sdf
kimuratakuya
83993138
83993138
kimuratakuya
我想要实现的功能是去掉一样的,要最后的结果是:
kimuratakuya,
sdf,
83993138
怎么样可以实现?
...全文
59 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
winagain 2004-04-10
  • 打赏
  • 举报
回复
leolan(史留香)& cuizm(射天狼)
的意见我非常

赞同
luoshulin 2004-04-10
  • 打赏
  • 举报
回复
用combox具体代码怎么写啊,我写了还是有问题
pigpag 2004-04-10
  • 打赏
  • 举报
回复
可以做个测试,个人感觉因为使用Collection/Dictionary的话内部算法肯定不是排序->筛选,每次都要寻找索引,性能肯定有所下降。这些都是后话了,如果只有n十或n百的话 :)
pigpag 2004-04-09
  • 打赏
  • 举报
回复
顺便问一下,本题和木村拓哉有什么关系 :)
notheal 2004-04-09
  • 打赏
  • 举报
回复
用Dictionary对象性能绝对可以保证。
pigpag 2004-04-08
  • 打赏
  • 举报
回复
恩,也可以。但是还是性能 :) 不知道VB干了些什么。

如果数据量不大的话,当然可以用Collection,简单方便!
射天狼 2004-04-08
  • 打赏
  • 举报
回复
利用集合关键字的唯一性!!

Private Sub Command1_Click()
On Error Resume Next
Dim coll As New Collection, i As Long

coll.Add "kimuratakuya", "kimuratakuya"
coll.Add "sdf", "sdf"
coll.Add "kimuratakuya", "kimuratakuya"
coll.Add "83993138", "83993138"
coll.Add "83993138", "83993138"
coll.Add "kimuratakuya", "kimuratakuya"

For i = 0 To coll.Count
MsgBox coll.Item(i)
Next
End Sub
leolan 2004-04-08
  • 打赏
  • 举报
回复
也可利用Collection的key的唯一性來過濾.
Dim objCollection As new Collection
Dim i as integer
on error resume next
objCollection .Add "kimuratakuya", "kimuratakuya"
objCollection .Add "kimuratakuya", "kimuratakuya"
objCollection .Add "sdf", "sdf"
...
...
for i=1 to objCollection.Count
debug.print objCollection.item(i)
next
set objCollection=nothing
pigpag 2004-04-08
  • 打赏
  • 举报
回复
对了,还可以用Dictionary对象,但是性能不敢保证
pigpag 2004-04-08
  • 打赏
  • 举报
回复
如果次序没关系的话,先排序,然后扫描一遍列表,如果一个项目与它上一个相同,就删去。(排序可以自己实现,也可以用ListBox.Sort = True来偷懒 :))
华芸智森 2004-04-08
  • 打赏
  • 举报
回复
你亦可以将其放到一个COMBOX中.设计时设置Sorted=TURE.来代替上面的排序函数.
也可以得利用集合关键字的唯一性等等....
华芸智森 2004-04-08
  • 打赏
  • 举报
回复
Option Explicit

Private Sub Command1_Click()
Dim I As Long
Dim ID As Long
Dim OleVal As String
Dim OutStr() As String

Dim Str(10) As String

Str(0) = "kimuratakuya"
Str(1) = "kimuratakuya"
Str(2) = "sdf"
Str(3) = "kimuratakuya"
Str(4) = "83993138"
Str(5) = "83993138"

Call StrSortAZ(Str, LBound(Str), UBound(Str)) '排序
For I = 0 To UBound(Str)
If OleVal <> Str(I) Or I = 0 Then '过滤重复项
ID = ID + 1
ReDim Preserve OutStr(ID)
OutStr(ID - 1) = Str(I)
End If
OleVal = Str(I)
Next

For I = 0 To UBound(OutStr)
Debug.Print OutStr(I)
Next
End Sub


'
'字符串快速排序(从小到大)
'函数:StrSortAZ
'参数:sArr String数组,First 数组的左边界,Last 数组右边界.
'返回值:无
'例子:
Public Sub StrSortAZ(ByRef sArr() As String, First As Long, Last As Long)
Dim vSplit As String, vT As String
Dim I As Long, J As Long, iRand As Long

If First < Last Then
If Last - First = 1 Then
If sArr(First) > sArr(Last) Then
vT = sArr(First): sArr(First) = sArr(Last): sArr(Last) = vT
End If
Else
iRand = Int(First + (Rnd * (Last - First + 1)))
vT = sArr(Last): sArr(Last) = sArr(iRand): sArr(iRand) = vT
vSplit = sArr(Last)
Do
I = First: J = Last
Do While (I < J) And (sArr(I) <= vSplit)
I = I + 1
Loop
Do While (J > I) And (sArr(J) >= vSplit)
J = J - 1
Loop

If I < J Then
vT = sArr(I): sArr(I) = sArr(J): sArr(J) = vT
End If
Loop While I < J

vT = sArr(I): sArr(I) = sArr(Last): sArr(Last) = vT

If (I - First) < (Last - I) Then
StrSortAZ sArr(), First, I - 1
StrSortAZ sArr(), I + 1, Last
Else
StrSortAZ sArr(), I + 1, Last
StrSortAZ sArr(), First, I - 1
End If
End If
End If
End Sub

paoluo 2004-04-08
  • 打赏
  • 举报
回复
是SQL里面吗??
yinweihong 2004-04-08
  • 打赏
  • 举报
回复
你要在什么里面过滤重复内容?

7,765

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧