所以我得到了一个字符串列表,其中一些字符串包含重复的字符串。
例如:
13-六碳六烯酸;13-甲基-4-五碳烯酸;14-甲基-6-五碳烯酸;15-六碳内酯;3-六碳六烯酸;4-十六碳烯酸;13-六碳六烯酸;13-甲基-4-五碳烯酸;14-甲基-6-十五烯酸;15-六碳内酯;3-六碳烯酸;4-六烯酸;
所以我在网上看到了一个宏,并调整它来解决我的问题,它是这样的:
Function stringOfUniques(inputString As String) As String
Dim inArray() As String
Dim xVal As Variant
inArray = Split(inputString, ";")
For Each xVal In inArray
If InStr(stringOfUniques, Trim(xVal)) = 0 Then _
stringOfUniques = stringOfUniques & Trim(xVal) & ","
Next xVal
End Function
对于我的一些字符串,这是非常出色的,但是对于上面的例子,它将返回字符串,删除重复的字符串,但奇怪的是,它将去掉两个单词‘3-六碳六烯酸’的副本。所以基本上
我应该得到的是:
13-六烯酸;13-甲基-4-五碳烯酸;14-甲基-6-五碳烯酸;15-六碳内酯;3-六碳烯酸;4-十六碳烯酸;
我真正得到的是:
13-六烯酸;13-甲基-4-五碳烯酸;14-甲基-6-五碳烯酸;15-六碳内酯;4-十六碳烯酸;
我的代码中有什么东西会导致这种情况发生吗?
发布于 2015-01-13 15:34:58
可能有几种方法可以做到这一点,但是Dictionary
对象对于执行唯一性非常好。
Function stringOfUniques(inputString As String, delimiter as String)
Dim xVal As Variant
Dim dict as Object
Set dict = CreateObject("Scripting.Dictionary")
For Each xVal In Split(inputString, delimiter)
dict(xVal) = xVal
Next xVal
stringOfUniques = Join(dict.Keys(),",")
End Function
该函数还被修改为接受变量分隔符参数,因此您将把输入字符串和分隔符:";"
传递给函数,函数将返回一个逗号分隔的字符串。
--关于词典的注释:
字典存储密钥/值对。钥匙一定是独一无二的。
在本例中,我对字典对象使用了一个简单的赋值:dict(key) = key
。字典在被其键引用时会自动添加或覆盖项,因此这是执行唯一性的一种非常简单的方法。
在其他情况下(例如,您希望计数每个键的出现次数),您需要使用dict.Exists(key)
进行测试,以便在不覆盖键/值对的情况下修改value
:
'Assigns a "count" value to the dictionary for each unique Key
For Each xVal In Split(inputString, delimiter)
If dict.Exists(xVal) Then
dict(xVal) = dict(xVal) + 1
Else
dict(xVal) = 1
End If
Next xVal
'Read the "count" from each key:
For Each xVal in dict.Keys()
MsgBox xVal & " appears " & dict(xVal) & " times"
Next
https://stackoverflow.com/questions/27925416
复制相似问题