尝试在字符串列表中查找字符串的子集

Trying to find subset of string in a list of string

提问人:wesley delk 提问时间:6/8/2023 最后编辑:wesley delk 更新时间:6/8/2023 访问量:39

问:

我正在尝试在 vb.net 字符串列表中查找子字符串。我不明白为什么在这里和其他地方四处寻找后这不起作用。我在下面写了一个简单的例子。我觉得我应该能够使用外卡,但似乎没有什么能解决问题。

Sub Main(args As String())

        Dim StringList As New List(Of String) From {"book1", "book2", "book3"}
        Dim st As String = StringList(0)

        'this block of code works
        If st.Contains("book") Then
            Console.WriteLine("This works!")
            Console.ReadLine()
        Else
            Console.WriteLine("This doesn't work!")
            Console.ReadLine()
        End If

        'this block of code does not work
        If StringList.Contains("book") Then
            Console.WriteLine("This works!")
            Console.ReadLine()
        Else
            Console.WriteLine("This doesn't work!")
            Console.ReadLine()
        End If

    End Sub

我尝试使用通配符。我觉得有比遍历列表更好的解决方案。

字符串 列表 vb.net 子字符串 包含

评论

0赞 djv 6/8/2023
IList.Contains “确定 IList 是否包含特定值”,而不是 IList 的项是否包含特定值。"...此方法使用集合对象的 item 的 Equals 和 CompareTo 方法来确定 item 是否存在。
0赞 djv 6/8/2023
你无法避免迭代。所有 LINQ 解决方案和 String.Join 都将循环访问该列表。性能最高的选项是 foreach、for、while 等,一旦找到匹配项,它就会停止,因此您不会迭代整个列表。@idle_mind答案 using 同样会在第一匹配时停止搜索。在句法上,它清晰简洁。Any
0赞 wesley delk 6/10/2023
因此,我确实通过使用 foreach 让它工作,但是考虑到它必须进入已经丑陋的 if 和 orelse 语句集合中,它真的很丑陋。我最终改用下面的答案。此外,它还给了我一些其他的东西来阅读:)

答:

3赞 Idle_Mind 6/8/2023 #1

我觉得有一个比迭代更好的解决方案 列表。

嗯,这确实是需要发生的事情。但是,您可以使用 .Any() 函数并传递给它一个 Lambda,它将为您进行迭代:

If StringList.Any(Function(s) s.Contains("book")) Then
    Console.WriteLine("This works!")
Else
    Console.WriteLine("This doesn't work!")
End If
0赞 Michael Foster 6/8/2023 #2

Idle_Mind的答案似乎是对的;您必须进行迭代,并且您可以让编译器完成迭代。但我宁愿这样使用:String.Join

If String.Join(",", StringList).Contains("book") Then

对我来说,这似乎更清楚,因为遵循我的思维方式。

请注意,如果此方法中不包含分隔符,则可能会得到不正确的结果,并且有几个字符串彼此相邻,例如 和 。bonobookra

从长远来看,我不确定哪个会更快。

评论

0赞 djv 6/8/2023
如果您正在搜索“1,b”怎么办?String.Join 也会迭代。OP对他的感觉是错误的I feel like there is a better solution than iterating through the list.
0赞 Michael Foster 6/8/2023
@djv,那么你应该选择一个不同的分隔符,一些更晦涩的东西。甚至包括多个不太可能组合在一起的角色。我从提供的数据中假设数据中只能有字母数字字符。
0赞 djv 6/8/2023
我的意思是,当然,但如果搜索字符串没有被硬编码为“book”,你不能保证它会 100% 工作。这仍然是一种有趣的方法,但您已经开始注意到其固有的缺陷。