Scala-maps
Scala-マップ
Scalaマップはキー/値のペアのコレクションです。 キーに基づいて任意の値を取得できます。 キーはマップ内で一意ですが、値は一意である必要はありません。 マップはハッシュテーブルとも呼ばれます。 Mapには、 immutable と mutable の2種類があります。 可変オブジェクトと不変オブジェクトの違いは、オブジェクトが不変の場合、オブジェクト自体を変更できないことです。
デフォルトでは、Scalaは不変のマップを使用します。 可変マップを使用する場合は、 scala.collection.mutable.Map クラスを明示的にインポートする必要があります。 同じで可変マップと不変マップの両方を使用する場合は、不変マップを引き続き Map として参照できますが、可変セットを mutable.Map として参照できます。
以下は、不変のマップを宣言するためのステートメント例です-
//Empty hash table whose keys are strings and values are integers:
var A:Map[Char,Int] = Map()
//A map with keys and values.
val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF")
空のマップを定義している間、システムは変数に具体的な型を割り当てる必要があるため、型注釈が必要です。 キーと値のペアをマップに追加する場合、次のように演算子+を使用できます。
A + = ('I' -> 1)
A + = ('J' -> 5)
A + = ('K' -> 10)
A + = ('L' -> 100)
MAPの基本操作
マップに対するすべての操作は、次の3つの方法で表現できます。
Sr.No | Methods & Description |
---|---|
1 |
keys このメソッドは、マップ内の各キーを含むイテラブルを返します。 |
2 |
values このメソッドは、マップ内の各値を含むイテラブルを返します。 |
3 |
isEmpty このメソッドは、マップが空の場合はtrueを返し、そうでない場合はfalseを返します。 |
Mapメソッドの使用法を示す次のサンプルプログラムを試してください。
例
object Demo {
def main(args: Array[String]) {
val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F")
val nums: Map[Int, Int] = Map()
println( "Keys in colors : " + colors.keys )
println( "Values in colors : " + colors.values )
println( "Check if colors is empty : " + colors.isEmpty )
println( "Check if nums is empty : " + nums.isEmpty )
}
}
上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
コマンド
\>scalac Demo.scala
\>scala Demo
出力
Keys in colors : Set(red, azure, peru)
Values in colors : MapLike(#FF0000, #F0FFFF, #CD853F)
Check if colors is empty : false
Check if nums is empty : true
マップの連結
++ *演算子または Map。++()*メソッドを使用して2つ以上のマップを連結できますが、マップを追加する際に重複キーは削除されます。
次のプログラム例を試して、2つのマップを連結してください。
例
object Demo {
def main(args: Array[String]) {
val colors1 = Map("red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F")
val colors2 = Map("blue" -> "#0033FF", "yellow" -> "#FFFF00", "red" -> "#FF0000")
//use two or more Maps with ++ as operator
var colors = colors1 ++ colors2
println( "colors1 ++ colors2 : " + colors )
//use two maps with ++ as method
colors = colors1.++(colors2)
println( "colors1.++(colors2)) : " + colors )
}
}
上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
コマンド
\>scalac Demo.scala
\>scala Demo
出力
colors1 ++ colors2 : Map(blue -> #0033FF, azure -> #F0FFFF,
peru -> #CD853F, yellow -> #FFFF00, red -> #FF0000)
colors1.++(colors2)) : Map(blue -> #0033FF, azure -> #F0FFFF,
peru -> #CD853F, yellow -> #FFFF00, red -> #FF0000)
マップからキーと値を印刷する
「foreach」ループを使用して、マップのキーと値を反復処理できます。 ここでは、イテレータに関連付けられた foreach メソッドを使用して、キーをウォークスルーしました。 以下はプログラム例です。
例
object Demo {
def main(args: Array[String]) {
val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF","peru" -> "#CD853F")
colors.keys.foreach{ i =>
print( "Key = " + i )
println(" Value = " + colors(i) )}
}
}
上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
コマンド
\>scalac Demo.scala
\>scala Demo
出力
Key = red Value = #FF0000
Key = azure Value = #F0FFFF
Key = peru Value = #CD853F
マップでキーを確認する
いずれかの Map.contains メソッドを使用して、特定のキーがマップに存在するかどうかをテストできます。 キーチェックを行う次のプログラム例を試してください。
例
object Demo {
def main(args: Array[String]) {
val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F")
if( colors.contains( "red" )) {
println("Red key exists with value :" + colors("red"))
} else {
println("Red key does not exist")
}
if( colors.contains( "maroon" )) {
println("Maroon key exists with value :" + colors("maroon"))
} else {
println("Maroon key does not exist")
}
}
}
上記のプログラムを Demo.scala に保存します。 このプログラムをコンパイルして実行するには、次のコマンドを使用します。
コマンド
\>scalac Demo.scala
\>scala Demo
出力
Red key exists with value :#FF0000
Maroon key does not exist
Scalaマップメソッド
以下は、マップで遊んでいるときに使用できる重要な方法です。 利用可能なメソッドの完全なリストについては、Scalaの公式ドキュメントを確認してください。
Sr.No | Methods with Description |
---|---|
1 |
def PLUSPLUS(xs: Map[(A, B)]): Map[A, B] このマップとxsによって提供されるマップのマッピングを含む新しいマップを返します。 |
2 |
def -(elem1: A, elem2: A, elems: A): Map[A, B]* elem1、elem2、またはいずれかのelemsに等しいキーを持つマッピングを除く、このマップのすべてのマッピングを含む新しいマップを返します。 |
3 |
def --(xs: GTO[A]): Map[A, B] トラバース可能なオブジェクトxsのキーと等しいキーを持つマッピングを除く、このマップのすべてのキー/値マッピングを持つ新しいマップを返します。 |
4 |
def get(key: A): Option[B] オプションで、キーに関連付けられた値を返します。 |
5 |
def iterator: Iterator[(A, B)] このマップのすべてのキー/値ペアに対して新しいイテレーターを作成します |
6 |
def addString(b: StringBuilder): StringBuilder この縮小可能なコレクションのすべての要素を文字列ビルダーに追加します。 |
7 |
def addString(b: StringBuilder, sep: String): StringBuilder セパレーター文字列を使用して、この縮小可能なコレクションのすべての要素を文字列ビルダーに追加します。 |
8 |
def apply(key: A): B 指定されたキーに関連付けられた値、または存在しない場合はマップのデフォルトメソッドの結果を返します。 |
9 |
def clear(): Unit マップからすべてのバインディングを削除します。 この操作が完了すると、マップは空になります。 |
10 |
def clone(): Map[A, B] レシーバーオブジェクトのコピーを作成します。 |
11 |
def contains(key: A): Boolean このマップにキーのバインディングがある場合はtrue、そうでない場合はfalseを返します。 |
12 |
def copyToArray(xs: Array[(A, B)]): Unit この縮小可能なコレクションの値を配列にコピーします。 指定された配列xsをこの縮小可能なコレクションの値で埋めます。 |
13 |
def count(p: A, BA, B ⇒ Boolean): Int 述部を満たす縮小可能なコレクション内の要素の数をカウントします。 |
14 |
def default(key: A): B キーが見つからないときに返される、マップのデフォルト値の計算を定義します。 |
15 |
def drop(n: Int): Map[A, B] 最初のn個を除くすべての要素を返します。 |
16 |
def dropRight(n: Int): Map[A, B] 最後のn個を除くすべての要素を返します |
17 |
def dropWhile(p: A, BA, B ⇒ Boolean): Map[A, B] 述語を満たす要素の最長のプレフィックスを削除します。 |
18 |
def empty: Map[A, B] 同じタイプの空のマップを返します。 |
19 |
def equals(that: Any): Boolean 両方のマップにまったく同じキー/値が含まれる場合はtrueを、そうでない場合はfalseを返します。 |
20 |
def exists(p: A, BA, B ⇒ Boolean): Boolean 指定された述語pがこの縮小可能コレクションの要素の一部を保持する場合はtrueを、そうでない場合はfalseを返します。 |
21 |
def filter(p: A, BA, B⇒ Boolean): Map[A, B] 述語を満たすこの縮小可能なコレクションのすべての要素を返します。 |
22 |
def filterKeys(p: (A) ⇒ Boolean): Map[A, B] キーが述語pを満たすこのマップのキーと値のペアのみで構成される不変のマップを返します。 |
23 |
def find(p: A, BA, B ⇒ Boolean): Option[(A, B)] 存在する場合、述部を満たす収縮可能なコレクションの最初の要素を検索します。 |
24 |
def foreach(f: A, BA, B ⇒ Unit): Unit この縮小可能なコレクションのすべての要素に関数fを適用します。 |
25 |
def init: Map[A, B] 最後を除くすべての要素を返します。 |
26 |
def isEmpty: Boolean マップが空かどうかをテストします。 |
27 |
def keys: Iterable[A] すべてのキーの反復子を返します。 |
28 |
def last: (A, B) 最後の要素を返します。 |
29 |
def max: (A, B) 最大の要素を見つけます。 |
30 |
def min: (A, B) 最小の要素を見つけます。 |
31 |
def mkString: String この縮小可能なコレクションのすべての要素を文字列で表示します。 |
32 |
def product: (A, B) numの*演算子に関して、この縮小可能なコレクションのすべての要素の積を返します。 |
33 |
def remove(key: A): Option[B] このマップからキーを削除し、そのキーに以前関連付けられていた値をオプションとして返します。 |
34 |
def retain(p: (A, B) ⇒ Boolean): Map.this.type 述部pがtrueを返すマッピングのみを保持します。 |
35 |
def size: Int このマップ内の要素の数を返します。 |
36 |
def sum: (A, B) numの+演算子に関して、この縮小可能なコレクションのすべての要素の合計を返します。 |
37 |
def tail: Map[A, B] 最初を除くすべての要素を返します。 |
38 |
def take(n: Int): Map[A, B] 最初のn個の要素を返します。 |
39 |
def takeRight(n: Int): Map[A, B] 最後のn個の要素を返します。 |
40 |
def takeWhile(p: A, BA, B ⇒ Boolean): Map[A, B] 述語を満たす要素の最長のプレフィックスを取ります。 |
41 |
def toArray: Array[(A, B)] この縮小可能なコレクションを配列に変換します。 |
42 |
def toBuffer[B >: A]: Buffer[B] このマップのすべての要素を含むバッファーを返します。 |
43 |
def toList: List[A] このマップのすべての要素を含むリストを返します。 |
44 |
def toSeq: Seq[A] このマップのすべての要素を含むseqを返します。 |
45 |
def toSet: Set[A] このマップのすべての要素を含むセットを返します。 |
46 |
def toString(): String オブジェクトの文字列表現を返します。 |