List
でも Map
の getOrElse
のようなことや get
の返り値でパターンマッチしたいことありませんか?例えば以下のコードを実行すると
java.lang.IndexOutOfBoundsException
がスローされます。val list = List("foo", "bar")
println(list(0))
println(list(2))
list(2)
の実行時に例外がスローされるのではなく None
が返ってほしいこともあります。方法は 2通りあります。
1つめは Map にしてしまう方法です。
val list = List("foo", "bar")
val map = list.zipWithIndex.map{case (elem, i) => (i, elem)}.toMap
println(map.get(0))
println(map.get(2))
ちょっとトリッキーな感じはしますが、こうすると
getOrElse
も使えます。もう 1つは
lift
メソッドを使う方法です。val list = List("foo", "bar")
val f = list.lift
println(f(0))
println(f(2))
1つめのコードのように
getOrElse
は使えませんが、シンプルに書けます。