确定字符串列表是否包含其他列表中所有字符串的子字符串

我有这种情况:

val a = listOf("wwfooww", "qqbarooo", "ttbazi")
val b = listOf("foo", "bar")

我想确定是否所有项目b都包含在 的子字符串中a,因此true在上述情况下应该返回所需的函数。我能想到的最好的是:

return a.any { it.contains("foo") } && a.any { it.contains("bar") }

但它迭代了a两次。a.containsAll(b)也不起作用,因为它比较字符串相等而不是子字符串。

回答

不确定是否有任何方法可以在不迭代ab.size. 因为如果你只想要 1 次迭代a,你将不得不检查所有元素b,现在你正在迭代b a.size多次,在这种情况下,你还需要跟踪哪个项目b已经匹配,而不是检查它们再次,这可能比仅迭代更糟糕a,因为您只能通过从列表中删除它们(或副本,您使用它代替b),或使用另一个列表来跟踪匹配项,然后进行比较原来如此b

所以我认为你的代码在正确的轨道上,但存在一些问题。例如,您没有任何对 的引用b,只是硬编码的字符串,b如果您有 2 个以上的元素,那么对 中的所有元素这样做会产生相当大的函数,或者更好,如果您还不知道值。

此代码将执行与您上面的代码相同的操作,但它实际上将使用来自 的元素b,而不是与 匹配的硬编码字符串b。(它会随着b b.size时间迭代,部分会随着时间迭代a b.size

return b.all { bItem ->
        a.any { it.contains(bItem) }
    }


以上是确定字符串列表是否包含其他列表中所有字符串的子字符串的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>