列トレイト Seq、IndexedSeq、および LinearSeq | 目次 |
最新版は Scala Documentation に移行しました。
列 (Seq) トレイトは、長さ (length) があり、それぞれの要素に 0 から数えられた固定された添字 (index) がある Iterable の一種だ。
以下の表にまとめられた列の演算は以下のカテゴリーに分けることができる:
Seq トレイトの演算 | |
---|---|
使用例 | 振る舞い |
添字と長さの演算: | |
xs(i) | (展開した場合、xs apply i)。xs の添字 i の位置の要素。 |
xs isDefinedAt i | xs.indices に i が含まれているか調べる。 |
xs.length | 列の長さ (size と同様)。 |
xs.lengthCompare ys | xs が ys より短い場合は -1、長い場合は +1、同じ長さの場合は 0 を返す。いずれかの列が無限でも正常に作動する。 |
xs.indices | 0 から xs.length - 1 までの xs の添字の範囲。 |
添字検索演算: | |
xs indexOf x | xs内で x と等しい最初の要素の添字 (数種の別形がある) 。 |
xs lastIndexOf x | xs内で x と等しい最後の要素の添字 (数種の別形がある) 。 |
xs indexOfSlice ys | xs の添字で、それと後続の要素が、列 ys と同値になる最初のもの。 |
xs lastIndexOfSlice ys | xs の添字で、それと後続の要素が、列 ys と同値になる最後のもの。 |
xs indexWhere p | xs内で条件関数 p を満たす最初の要素の添字 (数種の別形がある)。 |
xs segmentLength (p, i) | 全ての要素が途切れなく条件関数 p を満たし、xs(i) から始まる、最長の xs の切片の長さ。 |
xs prefixLength p | 全ての要素が途切れなく条件関数 p を満たす、最長の xs の先頭切片の長さ。 |
加算: | |
x +: xs | xs の要素の先頭に x を追加した、新しい列。 |
xs :+ x | xs の要素の最後に x を追加した、新しい列。 |
xs padTo (len, x) | xs の長さが len になるまで最後に値 x を追加していった列。 |
更新演算: | |
xs patch (i, ys, r) | xs内の、i から始まる r個の要素をパッチ ys内の要素と置換した列。 |
xs updated (i, x) | xsの添字 i の要素を x に置換したコピー。 |
xs(i) = x | (展開した場合、xs.update(i, x)、ただし可変列でのみ使用可能)。 xsの添字 i の位置の要素を x と上書きする。 |
並べ替え演算: | |
xs.sorted | xs の要素型の標準的な順序付けを用いて、xs の要素を並べ替えることによって得られる新しい列。 |
xs sortWith lt | 比較関数 lt 用いて xs の要素を並べ替えることによって得られる新しい列。 |
xs sortBy f | xs の要素を並べ替えることによって得られる新しい列。二つの要素の比較は、両者を関数 f に適用してその結果を比較することによって行われる。 |
逆転演算: | |
xs.reverse | xs内の要素を逆順にした列。 |
xs.reverseIterator | xs内の全ての要素を逆順に返すイテレータ。 |
xs reverseMap f | xs内の要素に逆順に関数 f を map して得られる列。 |
比較演算: | |
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 トレイトには LinearSeq と IndexedSeq という二つの子トレイトがある。これらは新しい演算を定義しないが、それぞれ異なった性能特性をもつ。線形列 (linear sequence) は効率的な head と tail 演算を持ち、一方添字付き列 (indexed sequence) は効率的なapply。length、および (可変の場合) update 演算を持つ。よく使われる線形列の例に scala.collection.immutable.List と scala.collection.immutable.Stream がある。よく使われる添字付き列の例としては scala.Array と scala.collection.mutable.ArrayBuffer がある。Vector は添字付き列と線形列の間の興味深い折衷案だ。事実上定数時間のオーバーヘッドで添字アクセスと線形アクセスを提供するからだ。そのため、ベクトルは添字アクセスと線形アクセスの両方を混合して使用してるアクセスパターンにおける良い基盤となる。ベクトルに関しては、また後ほど。
続いては、
列トレイト Seq、IndexedSeq、および LinearSeq | 目次 |