如何从列表中删除所有出现的子列表,例如
List(1, 2, 3, 4, 5, 6, 7, 4, 8, 9, 10, 5).removeSubList(4, 5)
应该删除所有出现的 (4, 5)(按这个顺序!),所以它返回
List(1, 2, 3, 6, 7, 4, 8, 9, 10, 5)
最佳答案
使用 indexOfSlice
的递归解决方案:
def removeSubList(l: List[Int], sublist: List[Int]): List[Int] = l.indexOfSlice(sublist) match {
case -1 => l
case index => removeSubList(l.patch(index, Nil, sublist.length), sublist)
}
// all of these print List(1 ,2 ,3):
println(removeSubList(List(1,2,3), List(4,5)))
println(removeSubList(List(1,2,3,4,5), List(4,5)))
println(removeSubList(List(4,5,1,2,3), List(4,5)))
println(removeSubList(List(4,5,1,2,4,5,3), List(4,5)))
编辑 :
indexOfSlice
版本而不是使用 diff
,这会忽略子列表顺序。 patch
更干净地移除子列表 关于list - 如何删除子列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38185514/