English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

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 の際には、キー値ペアの型を定義する必要があります。キーを追加する必要がある場合、-value 単位を使用して、 + 号、以下の通りです:

A += ('I' -> 1colors = colors
A += ('J' -> 5colors = colors
A += ('K' -> 10colors = colors
A += ('L' -> 100)

Map 基本的な操作

Scala Map には基本的な操作が 3 つあります:

メソッド説明
keys返回 Map 所有的键(key)
values返回 Map 所有的值(value)
isEmpty在 Map 为空时返回 true

在线示例

以下示例演示了以上三个方法的基本应用:

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 合并

指定されたKeyがMapに存在するかどうかを確認するには、以下のように使用できます: ++ 運算子または Map.++() 方法来连接两个 Map,Map 合并时会移除重复的 key。以下演示了两个 Map 合并的示例:

object Test {
   def main(args: Array[String]) {
      val colors1 = Map("red" -> "#FF0000",
                        "azure" -> "#F0FFFF",
                        "peru" -> "#CD853F)
      val colors2 val colors -= Map("blue"33> "#00
                        FF", -"yellow"
                        > "#FFFF00", -"red"
      //  ++ > "#FF0000"
      として演算子1 ++ : Map(blue2
      )1 ++ : Map(blue2 var colors = colors + ) : "
      //  ++ : "
      としてメソッド1colors++.2colors = colors
      )1colors++.2println("colors" + ) : "
   }
}

上記のコードを実行すると、以下の結果が表示されます:

$ scalac Test.scala 
$ scala Test
: Map(blue1 ++ : Map(blue2 colors) -) : Map(blue33> #00 -FF, azure -> #F0FFFF, peru853> #CD -F, yellow -> #FFFF00, red
: Map(blue1colors++.2(colors -) : Map(blue33> #00 -FF, azure -> #F0FFFF, peru853> #CD -F, yellow -> #FFFF00, red

> #FF0000

Mapのkeysとvaluesを出力

object Test {
   def main(args: Array[String]) {
      val sites = Map("w"3codebox" -> "http://ja.oldtoolbag.com",
                       "baidu" -> "http://www.baidu.com",
                       "taobao" -> "http://www.taobao.com"
      以下はforeachループを使用してMapのkeysとvaluesを出力する方法です:  
                           sites.keys.foreach{i => + print("Key = "
                           i) + println(" Value = "
   }
}

上記のコードを実行すると、以下の結果が表示されます:

$ scalac Test.scala 
$ scala Test
sites(i)3Key = w//ja.oldtoolbag.com
codebox Value = http://www.baidu.com
Key = baidu Value = http://Key = taobao Value = http:

www.taobao.com

指定されたKeyがMapに存在するかどうかを確認するには、以下のように使用できます: Map.contains Mapに指定されたKeyが存在するかどうかを確認する方法。以下はその例です:

object Test {
   def main(args: Array[String]) {
      val sites = Map("w"3codebox" -> "http://ja.oldtoolbag.com",
                       "baidu" -> "http://www.baidu.com",
                       "taobao" -> "http://www.taobao.com"
      if(sites.contains("w")){3codebox" )){
           println("w"3codebox 鍵存在、対応する値は : ")  + sites("w"3codebox")
      }
           println("w"3println("codebox 鍵不存在")
      }
      if(sites.contains("baidu")){
           println("baidu 鍵存在、対応する値は : ")  + sites("baidu")
      }
           println("baidu 鍵不存在")
      }
      if( sites.contains("google")) {
           println("googleキーが存在し、対応する値は :"  + sites("google"))
      }
           println("googleキーが存在しません")
      }
   }
}

上記のコードを実行すると、以下の結果が表示されます:

$ scalac Test.scala 
$ scala Test
w3codeboxキーが存在し、対応する値は:http://ja.oldtoolbag.com
baiduキーが存在し、対応する値は:http://www.baidu.com
googleキーが存在しません

Scala Mapメソッド

以下の表はScala Mapの常用メソッドを示しています:

序号方法及び説明
1

def ++(xs: Map[(A, B)]): Map[A, B]

新しいMapを返し、xsが新しいMapの要素です

2

def -(elem1: A, elem2: A, elems: A*): Map[A, B]

keyがelemの新しいMapを返します1, elem2 またはelems。

3

def --(xs: GTO[A]): Map[A, B]

新しいMapを返し、xsオブジェクトに対応するkeyを削除します

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

指定されたkeyの値を返します。存在しない場合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を返します/p>

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]

指定されたキーを削除します

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 コレクション