いい一日はいい睡眠から いい睡眠はいい一日から

読んだ記事のあれこれを書いていきます

2020/03/22

  • 英単語10words o
  • リスニング o
  • Scala o
  • コンテスト o

Scala

シーケンス

List

List型はSeq型の実装の一つ.

Seq(1, 2, 3) // res0: Seq[Int] = List(1, 2, 3)

Nil

Nilはオブジェクトであり,空のリストを表す.::という記号のケースクラスを使ってリストを構成していく.

Nil // res0: scala.collection.immutable.Nil.type = List()
3::Nil // res1: List[Int] = List(3)

リストは値を先頭から辿って取得するため,処理が線形時間となる.しかし,データの挿入や削除に関してのメモリ効率は優れている.

Array

Listとは逆の性質.宣言時にメモリを確保するため,添字を使った要素の取得は一度のアクセスでよい.しかし,宣言時にメモリを確保するという性質上,メモリの効率は悪くなる.
ArrayからListに,ListからArrayに変換することができるtoListtoArrayが存在し,それぞれに向いている操作ができるようになる.たとえばArrayをListに変換してやることで,mapflatMapfilterforeachといったSeq型のメソッドが利用できるようになる.

Set

他言語のSetとかわらない.オブジェクトだが,==で内部の比較ができる.和集合は++,差集合は--,積集合はintersectとなる.

順序

ScalaのSetは順序を維持しない.順序を維持するにはTreeSetを用いる.

Map

Mapは可変と不変があり,特に指定せず使用した場合は不変.
Mapに対して,toListを適用するとタプルのリストになる.

val m = Map("a" -> 1, "b" -> 2, "c" -> 3)
m.toList // List[(String, Int)] = List((a,1), (b,2), (c,3))