English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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)
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
指定された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
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:
指定された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の常用メソッドを示しています:
序号 | 方法及び説明 |
---|---|
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 ドキュメント