Scalaで配列またはリストを使う際はSeqがおすすめです。本記事では、他のプログラミング言語における配列やリストとは少し異なる挙動を示すSeqコレクションの文法および操作についてまとめました。
Seqの宣言
ScalaのSeqは以下のように作ることができます。
scala> Seq("One", "Two", "Three") res0: Seq[String] = List(One, Two, Three)
変数seqにリストを持たせる場合は以下のように宣言することができます
scala> val seq: Seq[String] = Seq("One", "Two", "Three") seq: Seq[String] = List(One, Two, Three)
Seqの要素についてString型をあらかじめ宣言する必要がある点が、Pythonなどのスクリプト言語との大きな違いです。
Seqの要素にアクセスする
ScalaでSeqの要素にアクセスする方法について紹介します。
次のように添字1を指定して要素を取り出すことができます。
scala> seq(1) res1: String = Two
Scalaの添字は他の多くのプログラミング言語と同じく0で始まるため、2番目の要素が抽出されていることがわかります。
また、Seqの先頭要素や末尾要素へのアクセスはheadやlastを使って次のように行うことができます。
scala> seq.head res2: String = One scala> seq.last res3: String = Three
Seqのinitやtailを使うと、次のように末尾以外・先頭以外の要素を取り出すことができます。
scala> seq.init res4: Seq[String] = List(Two, Three) scala> seq.tail res5: Seq[String] = List(One, Two)
Seqの要素を追加または削除する
ScalaでSeqに要素を追加または削除する方法について紹介します。
先頭に要素を追加するには+: 、末尾に追加するには :+ と記述します。
scala> "Zero" +: seq res6: Seq[String] = List(Zero, One, Two, Three) scala> seq +: "Four" res7: Seq[String] = List(One, Two, Three, Four)
このとき、元のseqは変化していないことに気づかれた方もいると思います。Scalaのコレクションは基本的に非破壊的であるため、新しいオブジェクトが返されるということを覚えておきましょう。
複数のSeqを連結する
Scalaで複数のSeqを結合する方法は次の通りです。
scala> val seqToAdd = Seq("Hello", "World") seqToAdd: Seq[String] = List(Hello, World) scala> seq ++ seqToAdd res8: Seq[String] = List(One, Two, Three, Hello, World)
Seq同士が連結されていることが確認できます。