集合トップIterableトレイト列トレイトSeq, IndexedSeq, およびLinearSeq目次

列トレイトSeq, IndexedSeq, およびLinearSeq

Seqトレイトは列を表します。 列はlengthを持ち、各要素が0から始まる固定された添字位置を持つイテラブルです。

列に対する演算は以下の図に要約でき、以下のカテゴリに分類できます:

もし列が変更可能であれば、追加で副作用のあるupdateメソッドを提供します。 通常のScalaのようにseq(idx) = elemという構文はseq.update(idx, elem)の略であり、updateは便利な代入構文をタダで与えます。 updateupdatedの違いに注意してください。 updateは列の要素を直接変更しますが、updatedは全ての列で利用可能で、元の列を変更する代わりに常に新しい列を返します。

クラスSeq内の演算
何であるか何をするか
添字付けと長さ:
xs(i) (または書き下してxs apply i)。xsiにある要素。
xs isDefinedAt i ixs.indicesに含まれるか調べる。
xs.length 列の長さ(sizeと同じ)。
xs.lengthCompare ys xsysより短かければ-1を返し、長ければ+1を返し、同じ長さを持てば0を返す。 片方の列が無限でも動作する。
xs.indices xsの添字範囲で、0からxs.length - 1まで。
添字検索:
xs indexOf x xと等しいxs内の最初の要素の添字(いくつか変種がある)。
xs lastIndexOf x xと等しいxs内の最後の要素の添字(いくつか変種がある)。
xs indexOfSlice ys その添字から始まる要素がysとなるようなxsの最初の添字。
xs lastIndexOfSlice ys その添字から始まる要素がysとなるようなxsの最後の添字。
xs indexWhere p xs内で最初にpを満たす要素の添字(いくか変種がある)。
xs segmentLength (p, i) xs内の要素で、全てが途切れ無く述語pを満たすようなxs(i)から始まる最も長い区間の長さ。
xs prefixLength p xs内の要素で、全てが述語pを満たすような最も長いプレフィックスの長さ。
追加:
x +: xs xxsの最初に追加してできた新しい列。
xs :+ x xxsの最後に追加してできた新しい列。
xs padTo (len, x) 長さがlenになるまでxsに値xを最後に追加してできる列。
更新:
xs patch (i, ys, r) xsiから始まるr要素をパッチysで置き替えてできる列。
xs updated (i, x) 添字iにある要素をxで置き替えたxsのコピー。
xs(i) = x (または書き下してxs.update(i, x)mutable.Seqにのみ存在) xsの添字iにある要素をyに変更する。
整列:
xs.sorted xsの要素型の標準的な順序付けでxsの要素を整列して得られる新しい列。
xs sortWith lt ltを順序付け演算としてxsの要素を整列して得られる新しい列。
xs sortBy f xsの要素を整列して得られる新しい列。 2要素の比較はまず関数fで両者を写してその結果を比較する。
反転:
xs.reverse xsの要素を逆順で持つ列。
xs.reverseIterator 全てのxs内の要素を逆順で返すイテレータ。
xs reverseMap f fxsの要素に逆順に適用して得られる列。
比較:
xs startsWith ys xsが列ysで始まるか調べる(いくつか変種がある)。
xs endsWith ys xsが列ysで終わるか調べる(いくつか変種がある)。
xs contains x xsxと等しい要素を含むか調べる。
xs containsSlice ys xsが列ysと等しい連続な部分列を持つか調べる。
(xs corresponds ys)(p) xsysの対応する要素が二項述語pを満たすか調べる。
多重集合演算:
xs intersect ys xsysの多重集合積で、xsの要素の順序を保存する。
xs diff ys xsysの多重集合差で、xsの要素の順序を保存する。
xs union ys 多重集合和。xs ++ ysと同じ。
xs.distinct 重複する要素を含まないxsの部分列。

Seqトレイトは2つの子トレイトLinearSeq, およびIndexedSeqを備えます。 両者は新しい演算を追加しませんが、それぞれ異なる効率特性を示します: 線形列(LinearSeq)は効率の良いheadtail演算を備えている一方、 添字付き列(IndexedSeq)は効率の良いapply, length, および(可変であれば)update演算を備えています。 よく使われる線形列はscala.collection.immutable.Listscala.collection.immutable.Streamです。 よく使われる添字付き列はscala.Arrayscala.collection.mutable.ArrayBufferです。 Vectorクラスは添字付きと線形アクセスの興味深い折衷案を提供します。 実質的に定数時間の添字付けのオーバーヘッドと、定数時間の線形アクセスのオーバーヘッドを持ちます。 この性質により、ベクタ(Vector)は添字付きと線形アクセスの両方が使われるような、混合したアクセスパターンのためのよい基盤となります。 ベクタについては他のところで学びます。

続いては:


集合トップIterableトレイト列トレイトSeq, IndexedSeq, およびLinearSeq目次