読者です 読者をやめる 読者になる 読者になる

【Scala】::(cons)と:::の違いを確認する。scalaのリスト結合。

scalaの勉強をしていたら、ちょっと似ているメソッドがあった。
それがタイトルにもある「::」と「:::」だ。


ていうか、「:::」ってなんて読むんだろう??笑
ちなみに、「::」は通称consらしい。構築constructの略みたい。


色々なパターンで使ってみて使い方を把握してく。


① ::の基本的な使い方

//::メソッドはリストの先頭に要素を追加してリストを返してくれる。

var list1 = List(1, 2, 3)

//リストの先頭に値を追加
var list2 = 4 :: list1

println(list2)

実行結果

$ List(4, 1, 2, 3)


はてなブログってscalaシンタックスもハイライト表示してくれるんだね(笑)


②:::の基本的な使い方

//:::メソッドはリストを結合して生成したリストを返す

var list1 = List(1, 2, 3)
var list2 = List(4, 5, 6)

var list3 = list1 ::: list2

println(list3)

実行結果

$ List(1, 2, 3, 4, 5, 6)


③::を使ってリストを初期化できる

val list = 1 :: 2 :: 3 :: Nil

println(list)

実行結果

$ List(1, 2, 3)

末尾にNilをつけることでリストを生成できるみたい。
ちなみにNilをつけないとコンパイルエラー。
「::」はリスト型のメソッドであるため、3のようなInt型で使用するとエラーになるから。


④::でリストを追加するとどうなるのか

val list1 = List(1, 2, 3)
val list2 = List(4, 5, 6)

val list3 = list1 :: list2

println(list3)

実行結果

$ List(List(1, 2, 3), 4, 5, 6)

なんとなく、「::」でリストを追加できるのでは??と思ってやってみた。
「::」はリストの先頭に要素を追加するメソッドなので、
結果はリストの先頭にリストが追加された形となった。:::の結合とは違う。


色々やってみると違いが把握できますね(・∀・)