val a = arrayOf(1, 2, 5, 7, 9, 15)
val b = arrayOf(15, 3, 5, 8)
val c = a intersect b.toList()
if (!c.isEmpty()) {
println("Arrays have common elements ${c}")
} else {
println("Arrays do not have common elements")
}
结果:
Arrays have common elements [5, 15]
在Kotlin中实现交集使用Set:
val set = this.toMutableSet()
set.retainAll(other)
return set
val arrayOne = arrayOf("a","b")
val arrayTwo = arrayOf("b", "c")
val intersectionArray = mutableListOf<String>()
arrayOne.forEach {
if (arrayTwo.contains(it)) intersectionArray.add(it)
}
//true or false, if the two arrays have any intersect or not
val arrayOneAndArrayTwoHaveIntersect = intersectionArray.size > 0
println("Array One contains an element of Array two: $arrayOneAndArrayTwoHaveIntersect")
//show the actual values that can be found in the two arrays
if (arrayOneAndArrayTwoHaveIntersect){
println("\n\nThe element(s) that can be found in the two arrays are as follows: \n")
intersectionArray.forEach {
println(it)
}
}
6条答案
按热度按时间z9smfwbn1#
如果你想看看两个数组之间是否有任何重叠,你可以这样做:
这是一个复杂度为O(n^2)的问题,所以我们可以用一个复杂度为O(n^2)的问题来解决。
toSet()
仅在第二个集合是Array而不是List之类的Iterable时才需要。3j86kqsm2#
示例:
结果:
在Kotlin中实现交集使用Set:
并且对于大多数典型的CASE应该足够了,例如,如果两个阵列都具有10000000个元件,则这花费大约8秒。
如果数组非常大(例如,当如此大量的元素的集合不适合内存时),可能的解决方案是对数组进行排序,并执行类似于合并排序数组的操作:
w1e3prcc3#
确保你的
array
A和B是相同的类型。然后像下面这样尝试。lstz6jyr4#
您可以使用
any
和contains
方法来检查是否存在公共元素。请注意:这种方法不是很有效。它的最坏情况复杂度为n^2。提高性能的一种方法是将执行查找的数组(本例中为
b
)转换为Setgfttwv5a5#
如果任何值匹配,则返回
true
或者使用
intersect
(返回一个集合,其中包含此数组和指定集合中包含的所有元素)k4emjkb16#