コレクションクラス

1. Listクラス

コレクションとは、複数の値を『まとめて変数』とする際の型の事です。 Scalaのコレクションは色々あって、その代表的な型がListです。 既に何度かでてきていますが、以下は String型の値を、順序が保たれた状態のList型の変数です。

val abcde = List('a', 'b', 'c', 'd', 'e')
for(h <- abcde)
 print(h)
// abcde ・・・ 順番に文字列を出力

このListには、様々な関数が用意されています。 簡単なものでは。

println(abcde.reverse)
// List(e, d, c, b, a)

本例では、宣言したabcdeの並び順を反転して(reverse)、出力しています。 色々便利な関数が準備されており、わりと簡単なものもあるのですが、最初まったく理解できなかったのが以下の表現でした。

final def map[B](f: (A) ⇒ B): List[B]  

リファレンスを見ても、 『 => 』 が出てくるのですが意味が理解できずにいました(今も抵抗がありますが)。 これが出て来たときは『関数リテラル』だと思えれば、すんなりと頭に入ってくるように感じます。 また、戻り値は『 『引数とは別の型を返す関数リテラルの戻り値』の型のList』となります。 例えば、abcdeはChar型の要素のListですが、その要素ひとつづつを『Int型に変換して、Listで返す関数リテラル』を mapの引数に渡すことができます。

// 関数リテラルを宣言して、変数 func1 に代入する。
val func1 = (p:Char) => p.toInt
// abcdeの各要素に、 func1を適用します。
abcde.map(func1(_))
// List(97, 98, 99, 100, 101)

ちなみに foreachと言う関数も用意されており、そちらを利用することで順番に処理できます。

abcde.foreach(x => print(x)) // x => print(x) も関数リテラル

2. Mapクラス

キーと値を複数持つ型です。下記例ではキーにあたる部分が2桁の数値で、都道府県名称が値になります。

val todofuken = Map("01" -> "北海道", "02" -> "青森県", "03" -> "岩手県")
println(todofuken("02"))
// 青森県
for((k, v) <- todofuken) println(s"Key: $k , Value: $v ")
// Key: 01 , Value: 北海道
// Key: 02 , Value: 青森県
// Key: 03 , Value: 岩手県

Listの際と同じように、色々便利な関数が用意されているのですが、とっつきにくい感じがしました。

def map[B](f: (A) ⇒ B): Map[B]

これもListと同じように考えて処理を記述します。

// タプルとして引数を受け取り、キーと値を出力する関数を渡す(別途 関数リテラルを宣言して渡すことはできない。。。)
todofuken.map(v => println( "(" + v._1 + ")" + v._2))

// (01)北海道
// (02)青森県
// (03)岩手県