我想创建一个函数来返回几个列表的交集。我做了如下操作:
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
编写那个函数?
1条答案
按热度按时间tcbh2hod1#
您的代码当前创建了一个
acc
的副本作为可变集,删除了不在it
中的元素,然后对它不做任何操作。您实际上从未保存或返回结果。acc.apply
只反映了对acc
实际所做的修改,而不是您对acc
副本所做的任何操作。