![]()  | ![]()  | ![]()  | 列トレイトSeq, IndexedSeq, およびLinearSeq | 目次 | 
Seqトレイトは列を表します。 列はlengthを持ち、各要素が0から始まる固定された添字位置を持つイテラブルです。
列に対する演算は以下の図に要約でき、以下のカテゴリに分類できます:
もし列が変更可能であれば、追加で副作用のあるupdateメソッドを提供します。 通常のScalaのようにseq(idx) = elemという構文はseq.update(idx, elem)の略であり、updateは便利な代入構文をタダで与えます。 updateとupdatedの違いに注意してください。 updateは列の要素を直接変更しますが、updatedは全ての列で利用可能で、元の列を変更する代わりに常に新しい列を返します。
| 何であるか | 何をするか | 
|---|---|
| 添字付けと長さ: | |
| xs(i) | (または書き下してxs apply i)。xsのiにある要素。 | 
| xs isDefinedAt i | iがxs.indicesに含まれるか調べる。 | 
| xs.length | 列の長さ(sizeと同じ)。 | 
| xs.lengthCompare ys | xsがysより短かければ-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 | xをxsの最初に追加してできた新しい列。 | 
| xs :+ x | xをxsの最後に追加してできた新しい列。 | 
| xs padTo (len, x) | 長さがlenになるまでxsに値xを最後に追加してできる列。 | 
| 更新: | |
| xs patch (i, ys, r) | xsのiから始まる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 | fをxsの要素に逆順に適用して得られる列。 | 
| 比較: | |
| xs startsWith ys | xsが列ysで始まるか調べる(いくつか変種がある)。 | 
| xs endsWith ys | xsが列ysで終わるか調べる(いくつか変種がある)。 | 
| xs contains x | xsがxと等しい要素を含むか調べる。 | 
| xs containsSlice ys | xsが列ysと等しい連続な部分列を持つか調べる。 | 
| (xs corresponds ys)(p) | xsとysの対応する要素が二項述語pを満たすか調べる。 | 
| 多重集合演算: | |
| xs intersect ys | xsとysの多重集合積で、xsの要素の順序を保存する。 | 
| xs diff ys | xsとysの多重集合差で、xsの要素の順序を保存する。 | 
| xs union ys | 多重集合和。xs ++ ysと同じ。 | 
| xs.distinct | 重複する要素を含まないxsの部分列。 | 
Seqトレイトは2つの子トレイトLinearSeq, およびIndexedSeqを備えます。 両者は新しい演算を追加しませんが、それぞれ異なる効率特性を示します: 線形列(LinearSeq)は効率の良いheadとtail演算を備えている一方、 添字付き列(IndexedSeq)は効率の良いapply, length, および(可変であれば)update演算を備えています。 よく使われる線形列はscala.collection.immutable.Listとscala.collection.immutable.Streamです。 よく使われる添字付き列はscala.Arrayとscala.collection.mutable.ArrayBufferです。 Vectorクラスは添字付きと線形アクセスの興味深い折衷案を提供します。 実質的に定数時間の添字付けのオーバーヘッドと、定数時間の線形アクセスのオーバーヘッドを持ちます。 この性質により、ベクタ(Vector)は添字付きと線形アクセスの両方が使われるような、混合したアクセスパターンのためのよい基盤となります。 ベクタについては他のところで学びます。
続いては:
![]()  | ![]()  | ![]()  | 列トレイトSeq, IndexedSeq, およびLinearSeq | 目次 |