kotlin 带reduce的多个列表的交集

iqjalb3h  于 2022-12-13  发布在  Kotlin
关注(0)|答案(1)|浏览(131)

我想创建一个函数来返回几个列表的交集。我做了如下操作:

fun <T> List<List<T>>.intersection(): List<T> {
    return this.reduce { acc, it -> acc.apply { acc.toMutableSet().retainAll(it.toSet()) } }
}

我用List<List<Int>>调用它,就像[[12, 321], [4, 35, 4], [67, 57, 8], [98, 97]],但是它总是返回第一个列表。预期的列表应该是一个空列表。我添加了一个also,看看这个reduce是用什么调用的,它总是相同的(第一个)列表。有人能解释一下我在这里做错了什么吗?我怎么才能用reduce编写那个函数?

tcbh2hod

tcbh2hod1#

您的代码当前创建了一个acc的副本作为可变集,删除了不在it中的元素,然后对它不做任何操作。您实际上从未保存或返回结果。acc.apply只反映了对acc实际所做的修改,而不是您对acc副本所做的任何操作。

相关问题