如何从列表中删除所有出现的子列表,例如

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)))

编辑 :
  • (感谢@corvus_192)恢复使用 indexOfSlice 版本而不是使用 diff ,这会忽略子列表顺序。
  • (感谢 @The Archetypal Paul)使用 patch 更干净地移除子列表
  • 关于list - 如何删除子列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38185514/

    10-11 21:52