如何用VBScript提取字符串唯一值?重复项移除问题求助
VBScript实现冒号分隔字符串的去重(保留唯一值)
针对你给出的字符串"20C:23B: 26G:67G:26G",要实现去重并保留原顺序,同时处理元素中的空格,可以用以下方案:
完整实现代码
Dim originalStr, arrItems, dict, i, cleanItem, resultArr originalStr = "20C:23B: 26G:67G:26G" ' 按冒号分割字符串为数组 arrItems = Split(originalStr, ":") ' 创建字典对象用于去重,同时维护元素顺序 Set dict = CreateObject("Scripting.Dictionary") ' 设置为不区分大小写去重,若需严格区分则删除此行 dict.CompareMode = vbTextCompare ' 初始化结果数组 ReDim resultArr(-1) For i = 0 To UBound(arrItems) ' 清理每个元素的前后空格,避免空格导致误判 cleanItem = Trim(arrItems(i)) ' 跳过空元素(分割后可能出现的情况) If cleanItem <> "" Then ' 检查元素是否已存在于字典中 If Not dict.Exists(cleanItem) Then ' 加入字典标记为已存在 dict.Add cleanItem, True ' 将唯一元素添加到结果数组 ReDim Preserve resultArr(UBound(resultArr) + 1) resultArr(UBound(resultArr)) = cleanItem End If End If Next ' 将结果数组拼接为冒号分隔的字符串并输出 WScript.Echo Join(resultArr, ":")
关键说明
- 处理空格:用
Trim()清理每个元素的前后空白,解决原字符串中" 26G"带空格的问题,避免因空格导致重复值被误判为不同元素。 - 字典去重:利用
Scripting.Dictionary的键唯一性特性实现去重,且VBScript的字典会保留键的添加顺序,确保输出和原字符串中元素的首次出现顺序一致。 - 大小写控制:
dict.CompareMode = vbTextCompare设置为不区分大小写去重,如果需要严格区分大小写(如"26G"和"26g"视为不同值),删除该行即可。
运行上述代码后,会输出预期结果:20C:23B:26G:67G
内容的提问来源于stack exchange,提问作者Shetty
相关产品推荐
相关产品推荐

