【如何最高效的排除字符串中重复值】

字符串为:

皮疹,晕厥,皮疹,肤泻,皮疹,恶心,呕吐,心悸,喉水肿,心悸,皮疹,皮疹,过敏性休克,过敏性休克,寒战,*胸闷,*气急,呕吐,变态反应,寒战,腹痛,皮疹,恶心,呕吐,荨麻疹,过敏样反应,心悸,多汗,过敏性休克,头晕,舌麻痹,皮疹,恶心,呕吐,过敏样反应,瘙痒,*胸闷,心悸,皮疹,瘙痒,皮疹,皮疹,皮疹,瘙痒,震颤,过敏样反应,皮疹,过敏样反应,荨麻疹,过敏样反应,红斑疹

现在要得到排除了其中的重复值之后的新字符串, 有很多方法可以做到这一点, 比如从第一位开始分析字符串, 或者使用 Scripting.Dictionary 对象逐个添加进去再判断排除, 或者使用数组, 或者...

因为这样的字符串非常多, 有几千条。如果使用复杂的对象比如 Scripting.Dictionary, 可以想象,速度一定像蜗牛一样。 我的想法是使用正则表达式来解决这个问题, 可是如何解决还没有想好。
大家帮忙想想,有什么好的办法都可以写出来, 最后按照最接近完美答案的程度来给分。

假设, 字符串中的分隔符是统一的, 比如都是逗号。
---------------------------------------------------------------

靠 ,居然不理我
---------------------------------------------------------------

关注一下!
---------------------------------------------------------------

关注一下!
关注一下!
跟了
---------------------------------------------------------------

我只会用数组,哈,写出来只是好玩哦

dim txt,txt_s,txt_ok

txt = "皮疹,晕厥,皮疹,肤泻,皮疹"
txt_s = split(txt,",")
for i = 0 to ubound(txt_s)
if instr(txt_ok,(txt_s(i) & ","))=0 then
txt_ok = txt_ok & txt_s(i) & ","
end if
next

txt_ok = left(txt_ok,(len(txt_ok)-1))
---------------------------------------------------------------

呵呵,
问一下:我不是很清楚,测试的时候不能通过。

正则对中文有效么???

---------------------------------------------------------------

这是个算法问题……串的匹配算法,KMP??
---------------------------------------------------------------

1<script>   
2function s1(a,b){return a-b}   
3var str = "1,2,3,2,6,5,4,7,2";   
4str = (","+ str).replace(/(.\d+)(.*)(\1)/g, "$2");   
5str = str.substr(1).split(",").sort(s1).join(",");   
6alert(str);   
7</script>

试着改改吧。
---------------------------------------------------------------

'凑个热闹

1   
2str="皮疹,晕厥,皮疹,肤泻,皮疹,恶心,呕吐,心悸,喉水肿,心悸,皮疹,皮疹,过敏性休克,过敏性休克,寒战,*胸闷,*气急,呕吐,变态反应,寒战,腹痛,皮疹,恶心,呕吐,荨麻疹,过敏样反应,心悸,多汗,过敏性休克,头晕,舌麻痹,皮疹,恶心,呕吐,过敏样反应,瘙痒,*胸闷,心悸,皮疹,瘙痒,皮疹,皮疹,皮疹,瘙痒,震颤,过敏样反应,皮疹,过敏样反应,荨麻疹,过敏样反应,红斑疹"   
3call test(str)   
 1   
 2sub test(str)   
 3arr=split(str,",")   
 4l=lbound(split(str,","))   
 5u=ubound(split(str,","))   
 6for i=l to u   
 7flag=0   
 8for j=l to i-1   
 9if arr(i)=arr(j) then flag=1 '重复   
10next   
11if flag=0 then   
12response.Write arr(i) &","   
13end if   
14next   
15end sub   

---------------------------------------------------------------

用instr最快
a="皮疹,晕厥,皮疹,肤泻,皮疹,恶心,呕吐,心悸,喉水肿,心悸,皮疹,皮疹,过敏性休克,过敏性休克,寒战,*胸闷,*气急,呕吐,变态反应,寒战,腹痛,皮疹,恶心,呕吐,荨麻疹,过敏样反应,心悸,多汗,过敏性休克,头晕,舌麻痹,皮疹,恶心,呕吐,过敏样反应,瘙痒,*胸闷,心悸,皮疹,瘙痒,皮疹,皮疹,皮疹,瘙痒,震颤,过敏样反应,皮疹,过敏样反应,荨麻疹,过敏样反应,红斑疹"
b=split(a,",")
d=""
for i=0 to ubound(b)
if instr(d,b(i))=0 then
d=d & "," & d(i)
end if
next
d=right(d,len(d)-1) '去掉","
---------------------------------------------------------------

大笨狼的:

 1<script language="vbs">   
 2'以下是测试部分   
 3dim vbsBegin : vbsBegin = Timer()   
 4dim a   
 5a="皮疹,晕厥,皮疹,肤泻,皮疹,恶心,呕吐,心悸,喉水肿,心悸,皮疹,皮疹,过敏性休克,过敏性休克,寒战,*胸闷,*气急,呕吐,变态反应,寒战,腹痛,皮疹,恶心,呕吐,荨麻疹,过敏样反应,心悸,多汗,过敏性休克,头晕,舌麻痹,皮疹,恶心,呕吐,过敏样反应,瘙痒,*胸闷,心悸,皮疹,瘙痒,皮疹,皮疹,皮疹,瘙痒,震颤,过敏样反应,皮疹,过敏样反应,荨麻疹,过敏样反应,红斑疹"   
 6  
 7'创建对象   
 8  
 9dim vbstest : vbstest = 1000   
10dim result : result = ""   
11for j =0 to vbstest   
12result = F(a)   
13next   
14dim vbsEnd : vbsEnd = Timer()   
15document.write "做完这件事需要" & (vbsEnd - vbsBegin) * 1000 & "豪秒
16"   
17document.write result   
18  
19function F(x)   
20dim A,S,tag,aaa   
21S = ""   
22A = split(x,",")   
23for each aaa in A   
24if instr(S," " & aaa & " ")<1 then S= S & " " & aaa & " "   
25next   
26F = trim(replace(S," "," "))   
27F = replace(F," ",",")   
28end function   
29  
30</script>

做完这件事需要187.5豪秒
皮疹,晕厥,肤泻,恶心,呕吐,心悸,喉水肿,过敏性休克,寒战,*胸闷,*气急,变态反应,腹痛,荨麻疹,过敏样反应,多汗,头晕,舌麻痹,瘙痒,震颤,红斑疹

------------------------------------

修改后:

 1<script language="vbs">   
 2'以下是测试部分   
 3dim vbsBegin : vbsBegin = Timer()   
 4dim a   
 5a="皮疹,晕厥,皮疹,肤泻,皮疹,恶心,呕吐,心悸,喉水肿,心悸,皮疹,皮疹,过敏性休克,过敏性休克,寒战,*胸闷,*气急,呕吐,变态反应,寒战,腹痛,皮疹,恶心,呕吐,荨麻疹,过敏样反应,心悸,多汗,过敏性休克,头晕,舌麻痹,皮疹,恶心,呕吐,过敏样反应,瘙痒,*胸闷,心悸,皮疹,瘙痒,皮疹,皮疹,皮疹,瘙痒,震颤,过敏样反应,皮疹,过敏样反应,荨麻疹,过敏样反应,红斑疹"   
 6  
 7'创建对象   
 8  
 9dim vbstest : vbstest = 1000   
10dim result : result = ""   
11for j =0 to vbstest   
12result = F(a)   
13next   
14dim vbsEnd : vbsEnd = Timer()   
15document.write "做完这件事需要" & (vbsEnd - vbsBegin) * 1000 & "豪秒
16"   
17document.write result   
18  
19function F(x)   
20dim A,S,tag,aaa   
21S = ","   
22A = split(x,",")   
23for each aaa in A   
24if instr(S,"," & aaa & ",")<1 then S= S & aaa & ","   
25next   
26F = mid(s,2,len(s)-2)   
27end function   
28</script>

做完这件事需要140.625豪秒
皮疹,晕厥,肤泻,恶心,呕吐,心悸,喉水肿,过敏性休克,寒战,*胸闷,*气急,变态反应,腹痛,荨麻疹,过敏样反应,多汗,头晕,舌麻痹,瘙痒,震颤,红斑疹
---------------------------------------------------------------

我也来凑一下热闹..执行成功, 可能数据量太小了..显示0.000

 1   
 2Dim strSource, strOK, i, arrStr, startTime   
 3startTime = Timer()   
 4strSource = "皮疹,晕厥,皮疹,肤泻,皮疹,恶心,呕吐,心悸,喉水肿,心悸,皮疹,皮疹,过敏性休克,过敏性休克,寒战,*胸闷,*气急,呕吐,变态反应,寒战,腹痛,皮疹,恶心,呕吐,荨麻疹,过敏样反应,心悸,多汗,过敏性休克,头晕,舌麻痹,皮疹,恶心,呕吐,过敏样反应,瘙痒,*胸闷,心悸,皮疹,瘙痒,皮疹,皮疹,皮疹,瘙痒,震颤,过敏样反应,皮疹,过敏样反应,荨麻疹,过敏样反应,红斑"   
 5arrStr = Split(Replace(strSource, " ", ""), ",")   
 6strOk = ","   
 7For i = 0 to UBound(arrStr)   
 8if Instr(1, strOk, "," & arrStr(i) & ",", 1) = 0 Then   
 9strOk = strOk & arrStr(i) & ","   
10End If   
11Next   
12strOk = Mid(strOk, 2, len(strOk) - 2)   
13response.Write(strOk)   
14response.Write("

<br/>

1")   
2response.Write("执行时间: " & FormatNumber((Timer() - startTime) * 1000, 3, true) & " 毫秒")   

---------------------------------------------------------------

再优化一下大笨狼的代码如下:

 1<script language="vbs">   
 2'以下是测试部分   
 3dim vbsBegin,a,j,vbstest,result,vbsEnd   
 4vbsBegin = Timer()   
 5vbstest = 1000   
 6result = ""   
 7a="皮疹,晕厥,皮疹,肤泻,皮疹,恶心,呕吐,心悸,喉水肿,心悸,皮疹,皮疹,过敏性休克,过敏性休克,寒战,*胸闷,*气急,呕吐,变态反应,寒战,腹痛,皮疹,恶心,呕吐,荨麻疹,过敏样反应,心悸,多汗,过敏性休克,头晕,舌麻痹,皮疹,恶心,呕吐,过敏样反应,瘙痒,*胸闷,心悸,皮疹,瘙痒,皮疹,皮疹,皮疹,瘙痒,震颤,过敏样反应,皮疹,过敏样反应,荨麻疹,过敏样反应,红斑疹"   
 8for j = 0 to vbstest   
 9result = F(a)   
10next   
11vbsEnd = Timer()   
12document.write "做完这件事需要" & (vbsEnd - vbsBegin) * 1000 & "豪秒<br>"   
13document.write result   
14  
15function F(x)   
16dim A,S,tag,aaa   
17S = ","   
18A = split(x,",")   
19for each aaa in A   
20if instr(S,"," & aaa & ",") < 1 then S = S & aaa & ","   
21next   
22F = mid(s,2,len(s)-2)   
23end function   
24</script>

---------------------------------------------------------------

本人不懂 RegExpression

相信用正则表达试执行的速度是最快的。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus