检查字典中是否包含子字符串?

6

假设我有两个字典,其键值对如下:

1, "Hello"
2, "Example"

还有另一个字典如下:

1, "HelloWorld"
2, "Example2"

我想确定这些字典中是否包含子字符串"hello",
dictionary.ContainsValue("Hello")可以适用于第一个示例,但不适用于第二个。如何检查字典中所有值中是否存在子字符串?

3个回答

15

只需使用Any来检查第一个包含“Hello”的值即可。

dictionary.Any(kvp=>kvp.Value.Contains("Hello"))

1
它无法识别“Any”函数。 - john cs
2
请确保添加 using System.Linq; - juharr
这需要检查每个字典元素,因此字典的任何性能增益都将被忽略。 - user626528
2
@user626528 错了,Any 方法会检查第一个符合条件的值。 - juharr
1
@user626528,你有什么具体的优化方案吗? - juharr
显示剩余3条评论

1
字典不允许搜索子字符串。要查找它,您需要枚举所有值并检查每个子字符串,就像juharr建议的那样。然而,这种方法非常低效。仅在完全不关心搜索性能时使用它。
如果需要良好的性能,请使用后缀数组算法。https://en.wikipedia.org/wiki/Suffix_array

这似乎是过度设计,而且对于在“HelloWorld”中查找“Hello”是行不通的,因为在这种情况下,“Hello”不是后缀。 - juharr
@juharr,如果TS不关心性能,这可能有些过分了,但显然你不理解后缀数组算法。它总是可以找到_任何_子字符串。 - user626528
你应该清楚地解释后缀数组算法是什么以及它的工作原理。 - scenia
@scenia,所提到的维基百科文章包含了你所需的所有后缀数组信息。 - user626528

0
dictionary.Values.Any(v => v.Contains("Hello"));

字典本身不是IEnumerable,因此它不会有LINQ扩展应用于它。


字典是一个 KeyValuePairsIEnumerable - juharr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接