Scalaの配列(Array)と連想配列(Map)
豊富にあるScalaのコレクション*1の中で、自分がよく使う配列(Array)と連想配列(Map)の使い方をまとめました。
関数型プログラミングやScalaの設計思想に明るくない素人なので、List
やSeq
やimmutable
云々の話は出てきません。
目次
配列 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()