字符串为:
皮疹,晕厥,皮疹,肤泻,皮疹,恶心,呕吐,心悸,喉水肿,心悸,皮疹,皮疹,过敏性休克,过敏性休克,寒战,*胸闷,*气急,呕吐,变态反应,寒战,腹痛,皮疹,恶心,呕吐,荨麻疹,过敏样反应,心悸,多汗,过敏性休克,头晕,舌麻痹,皮疹,恶心,呕吐,过敏样反应,瘙痒,*胸闷,心悸,皮疹,瘙痒,皮疹,皮疹,皮疹,瘙痒,震颤,过敏样反应,皮疹,过敏样反应,荨麻疹,过敏样反应,红斑疹
现在要得到排除了其中的重复值之后的新字符串, 有很多方法可以做到这一点, 比如从第一位开始分析字符串, 或者使用 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