如何修改HashSet(Of String)匹配函数实现忽略大小写的最佳匹配
可行,修改方法如下
核心修改点
原代码中HashSet(Of String)默认使用区分大小写的字符串比较规则,只需在创建HashSet时指定不区分大小写的比较器,即可实现忽略大小写的匹配。
修改后的完整代码
Public Shared Function FindBestMatch(ByVal stringToCompare As String, ByVal strs As IEnumerable(Of String)) As String ' 使用不区分大小写的比较器创建HashSet Dim strCompareHash As New HashSet(Of String)(stringToCompare.Split(Microsoft.VisualBasic.ChrW(32)), StringComparer.OrdinalIgnoreCase) Dim maxIntersectCount As Integer = 0 Dim bestMatch As String = String.Empty For Each str As String In strs ' 同样为每个待匹配字符串的HashSet指定不区分大小写的比较器 Dim strHash As New HashSet(Of String)(str.Split(Microsoft.VisualBasic.ChrW(32)), StringComparer.OrdinalIgnoreCase) Dim intersectCount As Integer = strCompareHash.Intersect(strHash).Count If (intersectCount > maxIntersectCount) Then maxIntersectCount = intersectCount bestMatch = str End If Next Return bestMatch End Function
关键说明
- 使用
StringComparer.OrdinalIgnoreCase作为比较器:它基于字符串的Unicode值进行不区分大小写的比较,性能稳定且不受区域文化影响,是大多数场景的首选。如果需要适配特定区域的大小写规则,可以改用StringComparer.CurrentCultureIgnoreCase。 - 可选优化:如果输入文本存在连续空格,可在
Split方法中添加StringSplitOptions.RemoveEmptyEntries参数,过滤分割产生的空字符串,避免无效匹配:stringToCompare.Split({Microsoft.VisualBasic.ChrW(32)}, StringSplitOptions.RemoveEmptyEntries)
内容的提问来源于stack exchange,提问作者Hugh Self Taught
相关产品推荐
相关产品推荐

