scala-library-next icon indicating copy to clipboard operation
scala-library-next copied to clipboard

Add `Seq.splitAround`

Open erikvanoosten opened this issue 1 year ago • 2 comments

This proposes to add Seq.splitAround(separator): (Seq, Seq) which splits a sequence in all items before and after the first item that is equal to the given separator.

SplitAround is useful for a very common string operation for which no handy operator exists. For example:

"bucket/path/prefix".splitAround('/') === ("bucket", "path/prefix")
"key=value".splitAround('=') === ("key", "value")

A simple implementation would be:

trait Seq[A] {
  def splitAround(separator: A): (Seq[A], Seq[A]) = {
    val (before, after) = this.splitAt(this.indexOf(separator))
    (before, after.drop(1))
  }
}

Ideally, the result uses the same concrete type of sequence as the given sequence. E.g. String.splitAround returns a pair of Strings and Vector.splitAround returns a pair of Vectors.

In addition, it would be nice to have a similar splitAroundLast which splits around the last separator value.

(Updated after @ritschwumm 's comment.)

erikvanoosten avatar Sep 06 '24 09:09 erikvanoosten