Scala Map(マッピング)

Scala コレクション

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つのメソッドの基本的な適用を示します。

実例

object Test {
   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 のマージの例を示します:

実例

object Test {
   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 を出力します:

実例

object Test {
   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 が存在するかどうかを確認できます。例は次のとおりです:

実例

object Test {
   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 ドキュメント

Scala コレクション

その他の拡張