How can I remove all occurrences of a sublist from a list, eg
List(1, 2, 3, 4, 5, 6, 7, 4, 8, 9, 10, 5).removeSubList(4, 5)
should remove all o
Variant on Tzach Zohar idea but with the assumption the OP wants a result that does not include the given sublist ever. Handles the case when sublist is empty
/**
* Return `s` with no occurrence of `target` present
*
* @param s
* @param target
* @return The sequence free of any occurrence of the target slice
*/
def removeCompletely[E](s: Seq[E], target: Seq[E]): Seq[E] = {
if (s.isEmpty || target.isEmpty)
s
else
removeCompletely0(s, target)
}
private def removeCompletely0[E](s: Seq[E], target: Seq[E]): Seq[E] = {
val sliceIdx = s.indexOfSlice(target)
if (sliceIdx >= 0) {
val patched = s.patch(sliceIdx, s take 0, target.size)
removeCompletely0(patched, target)
}
else {
s
}
}