ArrayOps Features:

Method Signature

ArrayOps
(JVM / Native)

js.ArrayOps
(js.Array)

narr.Extensions
(NArr)

def width: Int

✓ ✓ ✓

def knownSize: Int

✓ ✓ ✓

def isEmpty: Boolean

✓ ✓ ✓

def nonEmpty: Boolean

✓ ✓ ✓

def head: T

✓ ✓ ✓

def last: T

✓ ✓ ✓

def headOption: Option[T]

✓ ✓ ✓

def lastOption: Option[T]

✓ ✓ ✓

def sizeCompare(otherSize: Int): Int

✓ ✓ ✓

def lengthCompare(len: Int): Int

✓ ✓ ✓

def sizeIs: Int

✓ ✓ ✓

def lengthIs: Int

✓ ✓ ✓

def slice(from: Int, until: Int): Array[T]

✓ ✓ ✓

def tail: Array[T]

✓ ✓ ✓

def init: Array[T]

✓ ✓ ✓

def tails: Iterator[Array[T]]

✓ ✓ ✓

def inits: Iterator[Array[T]]

✓ ✓ ✓

def take(n: Int): Array[T]

✓ ✓ ✓

def drop(n: Int): Array[T]

✓ ✓ ✓

def takeRight(n: Int): Array[T]

✓ ✓ ✓

def dropRight(n: Int): Array[T]

✓ ✓ ✓

def takeWhile(p: T => Boolean): Array[T]

✓ ✓ ✓

def dropWhile(p: T => Boolean): Array[T]

✓ ✓ ✓

def iterator: Iterator[T]

✓ ✓ ✓

def stepper[S <: Stepper[_]](
  implicit shape: StepperShape[T, S]
): S with EfficientSplit

✓ ❌ ❌

def grouped(width: Int): Iterator[Array[T]]

✓ ✓ ✓

def span(p: T => Boolean): (Array[T], Array[T])

✓ ✓ ✓

def splitAt(n: Int): (Array[T], Array[T])

✓ ✓ ✓

def partition(p: T => Boolean): (Array[T], Array[T])

✓ ✓ ✓

def partitionMap[A1: ClassTag, A2: ClassTag](
  f: T => Either[A1, A2]
): (Array[A1], Array[A2])

✓ ✓ ✓

def reverse: Array[T]

✓ ✓ ✓

def reverseIterator: Iterator[T]

✓ ✓ ✓

def filter(p: T => Boolean): Array[T]

✓ ✓ ✓

def filterNot(p: T => Boolean): Array[T]

✓ ✓ ✓

def sorted[B >: T](implicit ord: Ordering[B]): Array[T]

✓ ✓ ✓

def sortWith(lt: (T, T) => Boolean): Array[T]

✓ ✓ ✓

def sortBy[B](f: T => B)(implicit ord: Ordering[B]): Array[T]

✓ ✓ ✓

def withFilter(p: T => Boolean): ArrayOps.WithFilter[T]

✓ ✓ ❌

def indexOf(elem: T, from: Int = 0): Int

✓ ✓ ✓

def indexWhere(p: T => Boolean, from: Int = 0): Int

✓ ✓ ✓

def lastIndexOf(elem: T, end: Int = xs.length - 1): Int

✓ ✓ ✓

def lastIndexWhere(p: T => Boolean, end: Int = xs.length - 1): Int

✓ ✓ ✓

def find(p: T => Boolean): Option[T]

✓ ✓ ✓

def exists(p: T => Boolean): Boolean

✓ ✓ ✓

def forall(p: T => Boolean): Boolean

✓ ✓ ✓

def foldLeft[B](z: B)(op: (B, T) => B): B

✓ ✓ ✓

def scanLeft[ B : ClassTag ](z: B)(op: (B, T) => B): Array[B]

✓ ✓ ✓

def scan[B >: T : ClassTag](z: B)(op: (B, B) => B): Array[B]

✓ ✓ ✓

def scanRight[ B : ClassTag ](z: B)(op: (T, B) => B): Array[B]

✓ ✓ ✓

def foldRight[B](z: B)(op: (T, B) => B): B

✓ ✓ ✓

def fold[A1 >: T](z: A1)(op: (A1, A1) => A1): A1

✓ ✓ ✓

def map[B](f: T => B)(implicit ct: ClassTag[B]): Array[B]

✓ ✓ ✓

def mapInPlace(f: T => T): Array[T]

✓ ✓ ✓

def flatMap[B : ClassTag](
  f: T => IterableOnce[B]
): Array[B]

✓ ✓ ✓

def flatMap[BS, B](f: T => BS)(
  implicit asIterable: BS => Iterable[B], m: ClassTag[B]
): Array[B]

✓ ✓ ✓

def flatten[B](
  implicit asIterable: T => IterableOnce[B], m: ClassTag[B]
): Array[B]

✓ ✓ ✓

def collect[B: ClassTag](pf: PartialFunction[T, B]): Array[B]

✓ ✓ ✓

def collectFirst[B](pf: PartialFunction[T, B]): Option[B]

✓ ✓ ✓

def zip[B](that: IterableOnce[B]): Array[(T, B)]

✓ ✓ ✓

def lazyZip[B](that: Iterable[B]): LazyZip2[T, B, Array[T]]

✓ ❌ ❌

def zipAll[A1 >: T, B](
  that: Iterable[B], thisElem: A1, thatElem: B
): Array[(A1, B)]

✓ ✓ ✓

def zipWithIndex: Array[(T, Int)]

✓ ✓ ✓

def appended[B >: T : ClassTag](x: B): Array[B]

✓ ✓ ✓

def :+ [B >: T : ClassTag](x: B): Array[B]

✓ ✓ ✓

def prepended[B >: T : ClassTag](x: B): Array[B]

✓ ✓ ✓

def +: [B >: T : ClassTag](x: B): Array[B]

✓ ✓ ✓

def prependedAll[B >: T : ClassTag](prefix: IterableOnce[B]): Array[B]

✓ ✓ ✓

def prependedAll[B >: T : ClassTag](prefix: Array[_ <: B]): Array[B]

✓ ✓ ✓

def ++: [B >: T : ClassTag](prefix: IterableOnce[B]): Array[B]

✓ ✓ ✓

def ++: [B >: T : ClassTag](prefix: Array[_ <: B]): Array[B]

✓ ✓ ✓

def appendedAll[B >: T : ClassTag](suffix: IterableOnce[B]): Array[B]

✓ ✓ ✓

def appendedAll[B >: T : ClassTag](suffix: Array[_ <: B]): Array[B]

✓ ✓ ✓

def :++ [B >: T : ClassTag](suffix: IterableOnce[B]): Array[B]

✓ ✓ ✓

def :++ [B >: T : ClassTag](suffix: Array[_ <: B]): Array[B]

✓ ✓ ✓

def concat[B >: T : ClassTag](suffix: IterableOnce[B]): Array[B]

✓ ✓ ✓

def concat[B >: T : ClassTag](suffix: Array[_ <: B]): Array[B]

✓ ❌ ✓

def ++[B >: T : ClassTag](xs: IterableOnce[B]): Array[B]

✓ ✓ ✓

def ++[B >: T : ClassTag](xs: Array[_ <: B]): Array[B]

✓ ✓ ✓

def contains(elem: T): Boolean

✓ ✓ ✓

def patch[B >: T : ClassTag](
  from: Int, other: IterableOnce[B], replaced: Int
): Array[B]

✓ ✓ ✓

def unzip[A1, A2](
  implicit asPair: T => (A1, A2), ct1: ClassTag[A1], ct2: ClassTag[A2]
): (Array[A1], Array[A2])

✓ ✓ ✓

def unzip3[A1, A2, A3](
  implicit asTriple: T => (A1, A2, A3),
  ct1: ClassTag[A1],
  ct2: ClassTag[A2],
  ct3: ClassTag[A3]
): (Array[A1], Array[A2], Array[A3])

✓ ✓ ✓

def transpose[B](implicit asArray: T => Array[B]): Array[Array[B]]

✓ ✓ ❌

def foreach[U](f: T => U): Unit

✓ ✓ ✓

def distinct: Array[T]

✓ ✓ ✓

def distinctBy[B](f: T => B): Array[T]

✓ ✓ ✓

def padTo[B >: T : ClassTag](len: Int, elem: B): Array[B]

✓ ✓ ✓

def indices: Range

✓ ✓ ✓

def groupBy[K](f: T => K): immutable.Map[K, Array[T]]

✓ ✓ ✓

def groupMap[K, B : ClassTag](
  key: T => K
)(
  f: T => B): immutable.Map[K, Array[B]]

✓ ✓ ✓

def toSeq: immutable.Seq[T]

✓ ✓ ✓

def toIndexedSeq: immutable.IndexedSeq[T]

✓ ✓ ✓

def copyToArray[B >: T](xs: Array[B]): Int

✓ ✓ ✓

def copyToArray[B >: T](xs: Array[B], start: Int): Int

✓ ✓ ✓

def copyToArray[B >: T](xs: Array[B], start: Int, len: Int): Int

✓ ✓ ✓

def toArray[B >: T: ClassTag]: Array[B]

✓ ✓ ✓

def count(p: T => Boolean): Int

✓ ✓ ✓

def startsWith[B >: T](that: Array[B]): Boolean

✓ ✓ ✓

def startsWith[B >: T](that: Array[B], offset: Int): Boolean

✓ ✓ ✓

def endsWith[B >: T](that: Array[B]): Boolean

✓ ✓ ✓

def updated[B >: T : ClassTag](index: Int, elem: B): Array[B]

✓ ✓ ✓

def view: IndexedSeqView[T]

✓ ✓ ✓

def diff[B >: T](that: Seq[B]): Array[T]

✓ ✓ ✓

def intersect[B >: T](that: Seq[B]): Array[T]

✓ ✓ ✓

def sliding(width: Int, step: Int = 1): Iterator[Array[T]]

✓ ✓ ✓

def combinations(n: Int): Iterator[Array[T]]

✓ ✓ ❌

def permutations: Iterator[Array[T]]

✓ ✓ ❌

def startsWith[B >: T](that: IterableOnce[B], offset: Int = 0): Boolean

✓ ✓ ❌*

def endsWith[B >: T](that: Iterable[B]): Boolean

✓ ✓ ❌*

def startsWithIterable[B >: T](that: IterableOnce[B], offset: Int = 0): Boolean

❌ ❌ ✓

def endsWithIterable[B >: T](that: Iterable[B]): Boolean

❌ ❌ ✓