さっしーブログ

埼玉県在住のシステムエンジニアです。基本的には技術的な内容を中心に発信していきます。

Scala入門 コレクション操作をしてみよう

目次

1.コレクション操作

1-1.シーケンス型

シーケンスは要素を順番に並べて管理できるコレクションです。
今回はListを使用して使い方を試していきます。
Listはイミュータブルなコレクションです。
要素を追加したり削除したりするときは新しくインスタンスを生成して返します。

scala> val list = Nil ①
list: scala.collection.immutable.Nil.type = List()

scala> val list1 = 1::list ②
list1: List[Int] = List(1)

scala> val list2 = 2::list1 ③
list2: List[Int] = List(2, 1)

scala> val list3 = 3::list2 ④
list3: List[Int] = List(3, 2, 1)

scala> list3.head ⑤
res0: Int = 3

scala> list3.tail ⑥
res1: List[Int] = List(2, 1)

scala> list3.isEmpty ⑦
res2: Boolean = false

scala> list3.length ⑧
res3: Int = 3

① Nilはからのリストを作成します。
② 「::」(cons)を使用して「1」という要素とlist変数に格納されているListを連結した新しいインスタンスを返しています。
③ ②と同様です。
④ 2と同様です。
⑤ list3変数に格納されている先頭要素を返しています。
⑥ list3変数に格納されている先頭要素を除いた残りの要素をListで返しています。
⑦ list3変数のListが空であるかどうかをtrue/falseで返します。
⑧ list3変数に格納されているListの長さを返します。

1-2.マップ型

キーとそれに紐づく値を管理します。

scala> val map = Map[String, String]("tokyo"->"shinjukuku","saitama"->"saitamashi", "kanagawa"->"yokohamashi", "tiba"->"tibashi","tochigi"->"utunomiyashi","gunma"->"maebashishi","ibaraki"->"mitoshi") ①
map: scala.collection.immutable.Map[String,String] = Map(gunma -> maebashishi, tokyo -> shinjukuku, saitama -> saitamashi, kanagawa -> yokohamashi, tiba -> tibashi, ibaraki -> mitoshi, tochigi -> utunomiyashi)

scala> map("saitama") ②
res4: String = saitamashi

scala> map("nagano") ③
java.util.NoSuchElementException: key not found: nagano
  at scala.collection.MapLike.default(MapLike.scala:232)
  at scala.collection.MapLike.default$(MapLike.scala:231)
  at scala.collection.AbstractMap.default(Map.scala:59)
  at scala.collection.MapLike.apply(MapLike.scala:141)
  at scala.collection.MapLike.apply$(MapLike.scala:140)
  at scala.collection.AbstractMap.apply(Map.scala:59)
  ... 36 elided

scala> map.empty ④
res6: scala.collection.immutable.Map[String,String] = Map()

scala> map + ("yamanashi"->"kouhushi") ⑤
res9: scala.collection.immutable.Map[String,String] = Map(gunma -> maebashishi, tokyo -> shinjukuku, yamanashi -> kouhushi, saitama -> saitamashi, kanagawa -> yokohamashi, tiba -> tibashi, ibaraki -> mitoshi, tochigi -> utunomiyashi)

scala> map - ("kanagawa") ⑥
res10: scala.collection.immutable.Map[String,String] = Map(gunma -> maebashishi, tokyo -> shinjukuku, saitama -> saitamashi, tiba -> tibashi, ibaraki -> mitoshi, tochigi -> utunomiyashi)

scala> map.size ⑦
res11: Int = 7

① 定義した要素を含んだマップを返します。
② 指定したキーに紐づく値を返します。
③ 存在しないキーを指定すると例外を送出します。
④ マップが空であるかをtrue/falseで返します。
⑤ 指定したキーと値をマップへ追加した新しいインスタンスを返します。
⑥ 指定したキーの要素を除いた新しいインスタンスを返します。
⑦ Mapのサイズを返します。

1-3.タプル型

異なる型の要素を格納できます。

scala> val tuple = ("test", 100) ①
tuple: (String, Int) = (test,100)

scala> tuple._1 ②
res13: String = test

scala> tuple._2
res14: Int = 100

①タプル型のオブジェクトを返します。
②値は「_(アンダーバー)」と要素の順番を指定すれば取得できます。

Listへの要素追加は癖がありますが、Mapへのkey/value追加は直観的でよいですね。

以上