あかんわ

覚えたことをブログに書くようにすれば多少はやる気が出るかと思ったんです

Scalaの配列(Array)と連想配列(Map)

豊富にあるScalaのコレクション*1の中で、自分がよく使う配列(Array)と連想配列(Map)の使い方をまとめました。

関数型プログラミングScalaの設計思想に明るくない素人なので、ListSeqimmutable云々の話は出てきません。

目次

配列 Array

配列の初期化

空の配列の宣言

変数varで宣言して念のため明示的に型を指定: Array[Int]します

/* Int型の要素を格納できる空の配列の宣言 */
var emptyArray: Array[Int] = Array.empty
要素のある配列の宣言

要素がある場合は明示的に型を指定しなくても問題無いようです

/* Int型の要素を格納した配列の宣言 */
val intArray = Array(1, 2, 3)

/* String型の要素を格納した配列の宣言 */
val stringArray = Array("one", "two", "three")

要素の取得・追加・削除・更新

配列から要素を取得

丸括弧で要素番号を指定し要素を取得します

/* intArrayの2番目の要素を取得 */
val intArray2 = intArray(2)
intArray2: Int = 3

/* stringArrayの0番目の要素を取得 */
val stringArray0 = stringArray(0)
stringArray0: String = one
要素の要素番号を取得

indexOfを使います*2

/* intArrayの要素2の要素番号を取得 */
val positionOf2 = intArray.indexOf(2)
positionOf2: Int = 1

/* stringArrayの要素oneの要素番号を取得 */
val positionOfone = stringArray.indexOf("one")
positionOfone: Int = 0
配列の要素数を取得

lengthを使います*3

/* intArrayの要素数を取得 */
val arrayValueNum = intArray.length
arrayValueNum: Int = 3
配列に要素を追加

コロン:とプラス+を組合せたメソッドで配列の末尾:+か先頭+:に要素を追加します

/* 配列の末尾に要素を追加 */
emptyArray = emptyArray :+ 1
emptyArray: Array[Int] = Array(1)

/* 配列の先頭に要素を追加 */
emptyArray = 0 +: emptyArray
emptyArray: Array[Int] = Array(0, 1)

/* 加算代入演算子のような書き方もできるようです */
emptyArray :+= 2
emptyArray: Array[Int] = Array(0, 1, 2)
配列から要素を削除

要素を削除する直接的なメソッドは無いようなのでfilterを使い新しい配列を作成します

/* 1を除いた要素を含む配列を作成する */
val filterArray = emptyArray.filter( n => n != 1)
filterArray: Array[Int] = Array(0, 2)
配列の要素を更新

updateで更新する要素の番号と新しい値を指定します

/* emptyArrayの2番目の要素を4に更新する */
emptyArray.update(2, 4)
emptyArray: Array[Int] = Array(0, 1, 4)

参考記事

連想配列 Map

連想配列の初期化

空の連想配列の宣言
/* 添字がString型で要素がInt型の空の連想配列の宣言 */
var emptyMap: Map[String, Int] = Map.empty
要素のある連想配列の宣言
/* 添字と要素がString型の連想配列の宣言 */
val stringMap = Map(
  "ぐー""ぐりこ", 
  "ちょき""ちよこれいと", 
  "ぱー""ぱいなつぷる"
)

要素の取得・追加・削除

配列から要素を取得

丸括弧で添字を指定し要素を取得します

/* stringMapの添字がぐーの要素を取得 */
val stringMapGu = stringMap("ぐー")
stringMapGu: String = ぐりこ
連想配列に添字と要素を追加

プラス+を使います

/* 連想配列に添字と要素を追加 */
emptyMap = emptyMap + ("Nehalem" -> 1)
emptyMap: Map[String,Int] = Map(Nehalem -> 1)

/* 加算代入演算子のような書き方もできるようです */
emptyMap += ("SandyBridge" -> 2)
emptyMap: Map[String,Int] = Map(Nehalem -> 1, SandyBridge -> 2)
連想配列から添字と要素を削除

マイナス-を使い削除する要素の添字を指定します

/* 連想配列から添字と要素を削除 */
emptyMap = emptyMap - "Nehalem"
emptyMap: Map[String,Int] = Map(SandyBridge -> 2)

/* 減算代入演算子のような書き方もできるようです */
emptyMap -= "SandyBridge"
emptyMap: Map[String,Int] = Map()

参考記事

*1:複数のデータを格納するデータタイプの総称

*2:複数の同じ要素が配列に含まれている場合は最初に見つかった要素の番号を取得します

*3:Intellij IDEAでsizeを使おうとするとlengthを使えと言われるので限定しています