NonEmptyList

  • ソースコード
  • scaladoc
  • 名前の通り、Non EmptyなListです。要素が1つ以上なことが必ず保証されています
  • 内部実装は、以下のものが使われています
    • 7.1.x まではScala標準ライブラリのList
    • 7.2.x 以降は、Scalaz独自のIList(性能特性は標準のListと同じ)
  • また、7.1と7.2で以下のような違いもあります。この違いにより、7.1から7.2に上げた際に、型推論の都合上書き方を変える必要がある場合があります
    • 7.1.x までは共変(covariant)
    • 7.2.x 以降は非変(invariant)
  • 上記のような内部実装になっているので、性能特性もListと同じです。つまり
    • 先頭の要素へのアクセスは定数時間
    • 末尾の要素へのアクセス、末尾への追加、sizeの取得などは、長さに比例した時間がかかる
  • いくつかのメソッドの使用例を書いておきます
import scalaz._

val a = NonEmptyList(1, 2, 3) // applyメソッドによる生成
// a: NonEmptyList[Int] = NonEmpty[1,2,3]

val b = 100 <:: a // 先頭へ一つ追加
// b: NonEmptyList[Int] = NonEmpty[100,1,2,3]

a.head // 先頭を取り出し
// res0: Int = 1

a.size // サイズ取得
// res1: Int = 3

a.reverse // 反転
// res2: NonEmptyList[Int] = NonEmpty[3,2,1]

a.map(_ + 1) // 要素をmap
// res3: NonEmptyList[Int] = NonEmpty[2,3,4]

a.flatMap(x => NonEmptyList(x, x + 10)) // Monadであり、flatMapメソッドがある
// res4: NonEmptyList[Int] = NonEmpty[1,11,2,12,3,13]

results matching ""

    No results matching ""