Scala Map(マッピング)
Map(マッピング)は反復可能なキーと値のペア(key/value)構造です。
すべての値はキーを介して取得できます。
Map 内のキーはすべて一意です。
Map はハッシュテーブル(Hash tables)とも呼ばれます。
Map には可変と不変の2つのタイプがあります。違いは、可変オブジェクトは変更できますが、不変オブジェクトは変更できないことです。
デフォルトでは、Scala は不変 Map を使用します。可変コレクションを使用する必要がある場合は、明示的にインポートする必要があります。import scala.collection.mutable.Map 类
Scala では、可変と不変の両方の Map を使用できます。不変のものは直接 Map を使用し、可変のものは mutable.Map を使用します。以下の例では、不変 Map の適用を示します。
// 空哈希表,键为字符串,值为整型
var A:Map[Char,Int] = Map()
// Map 键值对演示
val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF")
Map を定義するときは、キーと値のペアに型を定義する必要があります。key-value ペアを追加する必要がある場合は、+ 記号を使用できます。次のようになります。
A += ('I' -> 1)
A += ('J' -> 5)
A += ('K' -> 10)
A += ('L' -> 100)
Map の基本操作
Scala Map には3つの基本操作があります:
| メソッド | 説明 |
|---|---|
| keys | Map のすべてのキー(key)を返す |
| values | Map のすべての値(value)を返す |
| isEmpty | Map が空の場合に true を返す |
実例
以下の例では、上記3つのメソッドの基本的な適用を示します。
実例
def main(args: Array[String]) {
val colors = Map("red" -> "#FF0000",
"azure" -> "#F0FFFF",
"peru" -> "#CD853F")
val nums: Map[Int, Int] = Map()
println( "colors のキーは : " + colors.keys )
println( "colors の値は : " + colors.values )
println( "colors が空かどうかを検出 : " + colors.isEmpty )
println( "nums が空かどうかを検出 : " + nums.isEmpty )
}
}
上記のコードを実行すると、出力結果は次のようになります:
$ scalac Test.scala $ scala Test colors 中的键为 : Set(red, azure, peru) colors 中的值为 : MapLike(#FF0000, #F0FFFF, #CD853F) 检测 colors 是否为空 : false 检测 nums 是否为空 : true
Map のマージ
使用できるのは++演算子またはMap.++()メソッドで2つの Map を接続できます。Map をマージするときに重複するキーは削除されます。以下に2つの Map のマージの例を示します:
実例
def main(args: Array[String]) {
val colors1 = Map("red" -> "#FF0000",
"azure" -> "#F0FFFF",
"peru" -> "#CD853F")
val colors2 = Map("blue" -> "#0033FF",
"yellow" -> "#FFFF00",
"red" -> "#FF0000")
// ++ を演算子として
var colors = colors1 ++ colors2
println( "colors1 ++ colors2 : " + colors )
// ++ をメソッドとして
colors = colors1.++(colors2)
println( "colors1.++(colors2) : " + colors )
}
}
上記のコードを実行すると、出力結果は次のようになります:
$ scalac Test.scala $ scala Test 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)
Map の keys と values を出力
以下では、foreach ループを使用して Map 内の keys と values を出力します:
実例
def main(args: Array[String]) {
val sites = Map("サンプル" -> "http://www.example.com",
"baidu" -> "http://www.baidu.com",
"taobao" -> "http://www.taobao.com")
sites.keys.foreach{ i =>
print( "Key = " + i )
println(" Value = " + sites(i) )}
}
}
上記のコードを実行すると、出力結果は次のようになります:
$ scalac Test.scala $ scala Test Key = サンプル Value = http://www.example.com Key = baidu Value = http://www.baidu.com Key = taobao Value = http://www.taobao.com
Map に指定された Key が存在するか確認
使用できるのはMap.containsメソッドで、Map に指定された Key が存在するかどうかを確認できます。例は次のとおりです:
実例
def main(args: Array[String]) {
val sites = Map("サンプル" -> "http://www.example.com",
"baidu" -> "http://www.baidu.com",
"taobao" -> "http://www.taobao.com")
if( sites.contains( "サンプル" )){
println("サンプル キーが存在し、対応する値は :" + sites("サンプル"))
}else{
println("サンプル キーは存在しません")
}
if( sites.contains( "baidu" )){
println("baidu キーが存在し、対応する値は :" + sites("baidu"))
}else{
println("baidu キーは存在しません")
}
if( sites.contains( "google" )){
println("google キーが存在し、対応する値は :" + sites("google"))
}else{
println("google キーは存在しません")
}
}
}
上記のコードを実行すると、出力結果は次のようになります:
$ scalac Test.scala $ scala Test サンプル 键存在,对应的值为 :http://www.example.com baidu 键存在,对应的值为 :http://www.baidu.com google 键不存在
Scala Map のメソッド
次の表は、Scala Map でよく使われるメソッドの一覧です:
| 番号 | メソッドと説明 |
|---|---|
| 1 |
def ++(xs: Map[(A, B)]): Map[A, B] 新しい Map を返します。新しい Map は xs で構成されます。 |
| 2 |
def -(elem1: A, elem2: A, elems: A*): Map[A, B] キーが elem1, elem2 または他の elems を削除した新しい Map を返します。 |
| 3 |
def --(xs: GTO[A]): Map[A, B] xs オブジェクト内の対応するキーを削除した新しい Map を返します。 |
| 4 |
def get(key: A): Option[B] 指定された key の値を返す |
| 5 |
def iterator: Iterator[(A, B)] 新しいイテレータを作成し、key/value ペアを出力する |
| 6 |
def addString(b: StringBuilder): StringBuilder Map 内のすべての要素を StringBuilder に追加します。区切り文字を追加できます。 |
| 7 |
def addString(b: StringBuilder, sep: String): StringBuilder Map 内のすべての要素を StringBuilder に追加します。区切り文字を追加できます。 |
| 8 |
def apply(key: A): B 指定されたキーの値を返します。存在しない場合は Map のデフォルト値を返します。 |
| 9 |
def clear(): Unit Map を空にする |
| 10 |
def clone(): Map[A, B] ある Map から別の Map にコピーする |
| 11 |
def contains(key: A): Boolean Map に指定された key が存在する場合は true を返し、それ以外の場合は false を返します。 |
| 12 |
def copyToArray(xs: Array[(A, B)]): Unit コレクションを配列にコピーする |
| 13 |
def count(p: ((A, B)) => Boolean): Int 指定された条件を満たすコレクション要素の数を計算する |
| 14 |
def default(key: A): B Map のデフォルト値を定義します。key が存在しない場合に返されます。 |
| 15 |
def drop(n: Int): Map[A, B] 最初の n 個の要素を破棄して新しいコレクションを返す |
| 16 |
def dropRight(n: Int): Map[A, B] 最後の n 個の要素を破棄して新しいコレクションを返す |
| 17 |
def dropWhile(p: ((A, B)) => Boolean): Map[A, B] 左から右へ要素を破棄し、条件 p が成立しなくなるまで続ける |
| 18 |
def empty: Map[A, B] 同じ型の空の Map を返す |
| 19 |
def equals(that: Any): Boolean 2つの Map が等しい場合(key/value がすべて等しい)、true を返し、それ以外の場合は false を返します。 |
| 20 |
def exists(p: ((A, B)) => Boolean): Boolean コレクション内に指定された条件の要素が存在するかどうかを判定する |
| 21 |
def filter(p: ((A, B))=> Boolean): Map[A, B] 指定された条件を満たすすべてのコレクションを返す |
| 22 |
def filterKeys(p: (A) => Boolean): Map[A, B] 指定された条件に一致する不変 Map を返す |
| 23 |
def find(p: ((A, B)) => Boolean): Option[(A, B)] コレクション内で指定された条件を満たす最初の要素を検索する |
| 24 |
def foreach(f: ((A, B)) => Unit): Unit 関数をコレクションのすべての要素に適用する |
| 25 |
def init: Map[A, B] 最後の要素を除くすべての要素を返す |
| 26 |
def isEmpty: Boolean Map が空かどうかを検出する |
| 27 |
def keys: Iterable[A] すべての key を返す |
| 28 |
def last: (A, B) 最後の要素を返す |
| 29 |
def max: (A, B) 最大の要素を検索する |
| 30 |
def min: (A, B) 最小の要素を検索する |
| 31 |
def mkString: String コレクションのすべての要素を文字列として表示する |
| 32 |
def product: (A, B) コレクション内の数値要素の積を返します。 |
| 33 |
def remove(key: A): Option[B] 指定された key を削除する |
| 34 |
def retain(p: (A, B) => Boolean): Map.this.type 条件を満たす場合は true を返します |
| 35 |
def size: Int Map の要素数を返す |
| 36 |
def sum: (A, B) コレクション内のすべての数値要素の合計を返す |
| 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, B)) => Boolean): Map[A, B] 指定された条件を満たす要素を返す |
| 41 |
def toArray: Array[(A, B)] コレクションを配列に変換 |
| 42 |
def toBuffer[B >: A]: Buffer[B] Map のすべての要素を含むバッファを返す |
| 43 |
def toList: List[A] Map のすべての要素を含む List を返す |
| 44 |
def toSeq: Seq[A] Map のすべての要素を含む Seq を返す |
| 45 |
def toSet: Set[A] Map のすべての要素を含む Set を返す |
| 46 |
def toString(): String 文字列オブジェクトを返す |
より多くのメソッドは参照できますAPI ドキュメント
その他の拡張