Scalaの地図(マップ)
地図(マップ)は、反復キーと値のペア(キー/値)構造の一種です。
すべての値は、キーで検索することができます。
キーは一意である、地図。
地図はまた、ハッシュテーブル(ハッシュテーブル)と呼ばれています。
地図があり、変数の2種類があり、変更可能なオブジェクトができないことなく、変数オブジェクトは、それを修正することができることを除いて、変更することはできません。
デフォルトでは、Scalaの不変のマップ。 あなたは、変数のコレクションを使用する必要がある場合は、明示的にインポートscala.collection.mutable.Mapクラスを導入する必要があります
スカラ座では、変数と不変の地図、直接使用するマップ不変、可変の使用mutable.Mapを使用することができます。 次の例では、不変のマップのアプリケーションを示しています。
// 空哈希表,键为字符串,值为整型 var A:Map[Char,Int] = Map() // Map 键值对演示 val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF")
あなたがマップを定義するときは、キーと値のペアのタイプを定義する必要があります。 あなたは、キーと値のペアを追加する必要がある場合は、次のように、+記号を使用することができます。
A += ('I' -> 1) A += ('J' -> 5) A += ('K' -> 10) A += ('L' -> 100)
基本操作地図
Scalaの地図3基本的な操作があります。
ウェイ | 説明 |
---|---|
キー | 戻るすべてのキー(鍵)を、地図 |
価値観 | 地図は、すべての値(値)を返します |
isEmpty | 地図では、空の戻り値は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
地図の合併
あなたが++演算子またはマップを使用することができます。++()メソッドを2地図を接続するために、重複したキーマップの合併を削除します。 次の2つの例を組み合わせマップを示します。
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)
出力キーと値の地図
キーと値の出力地図を通じ、次のforeachループ:
object Test { def main(args: Array[String]) { val sites = Map("w3big" -> "http://www.w3big.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 = w3big Value = http://www.w3big.com Key = baidu Value = http://www.baidu.com Key = taobao Value = http://www.taobao.com
指定されたキーがマップ内に存在するかどうかを確認してください
指定したキーマップの存在かどうかを確認するためにMap.containsメソッドを使用することができます。 例としては、次のとおりです:
object Test { def main(args: Array[String]) { val sites = Map("w3big" -> "http://www.w3big.com", "baidu" -> "http://www.baidu.com", "taobao" -> "http://www.taobao.com") if( sites.contains( "w3big" )){ println("w3big 键存在,对应的值为 :" + sites("w3big")) }else{ println("w3big 键不存在") } 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 w3big 键存在,对应的值为 :http://www.w3big.com baidu 键存在,对应的值为 :http://www.baidu.com google 键不存在
Scalaのマップ方法
次の表は、一般的に使用される方法Scalaの地図を示しています。
いいえ。 | メソッドと説明 |
---|---|
1 | デフ++(XS:マップ[( A、B)]):マップ[A、B] これは、新しい地図、新しい地図XSの組成を返します |
2 | デフ- (elem1:A、のElem2 :A、elems:*):マップ[A、B] 新しいマップを返し、elem1への鍵、のElem2または他のelemsを削除します。 |
3 | デフ- (XS:GTO [A ]):マップ[A、B] 新しいマップを返し、XSがキーに対応するオブジェクトの削除 |
4 | デフ取得(キー:A):オプション[B] 指定されたキーの値を返します |
5 | デフイテレータ:イテレータ[(A、 B)] 新しいイテレータを作成し、キー/値のペアを出力 |
6 | デフaddString(B:StringBuilderの):のStringBuilder 地図のStringBuilderに接続されたすべての要素は、セパレーターに追加することができます |
7 | デフaddString(B:StringBuilderを、9月 :文字列):StringBuilderの 地図のStringBuilderに接続されたすべての要素は、セパレーターに追加することができます |
8 | :デフ(:Aキー)を適用 Bを デフォルトのメソッドマップにノーリターンがない場合、指定されたキーの値を返します |
9 | デフクリア():ユニット 地図をクリア |
10 | デフクローン():マップ[A 、B] 1から別の地図マップへ |
11 | デフ(キー:A):含まれていブール 指定されたキーマップがある場合は、それ以外の場合はfalseを返し、trueを返します。 |
12 | デフcopyToArray(XS:配列[( A、B)]):ユニット 配列に設定をコピー |
13 | デフカウント(P:((A 、B))=>ブール):のInt 設定指定された基準を満たす要素の数を計算します |
14 | デフデフォルト(キー:A): B キーが存在しない場合、デフォルト値は、マップ戻る定義されています。 |
15 | デフドロップ(N:INT):マップ[A、B] 破棄n個の要素を返す前に新しいコレクション |
16 | デフdropRight(N:INT):マップ[A、B] 戻る新しいコレクションの最後のn個の要素を破棄 |
17 | デフdropWhile(P:((A 、B))=>ブール):マップ[A、B] 条件が満たされ、pがなくなるまで廃棄要素は、左から右へ |
18 | デフ空:地図[A、B ] 空のMapの同じ型を返します |
19 | デフ等号(つまり:任意):ブール 2が同じマップされている場合(キー/値が等しい)、true、そうでない場合はfalseを返します |
20 | デフ(:((A Pが存在するブール:、B))=>ブール) コレクション要素が存在するで指定された条件の分析 |
21 | デフフィルタ(P:((A 、B))=>ブール):マップ[A、B] 戻る指定された基準を満たすすべてのコレクションへ |
22 | デフフィルタキー(P:(A) =>ブール):マップ[A、B] 不変の地図の指定の基準を満たす返します |
23 | デフ見つけた(p:((A 、B))=>ブール):オプション[(A、B)] 指定された基準を満たしているコレクション内の最初の要素を検索します |
24 | デフforeachの(F:((A 、B))=>ユニット):ユニット 集合への関数のすべての要素 |
25 | デフのinit:地図[A、B ] 最後の1を除いて、すべての要素を返します。 |
26 | デフのisEmpty:ブール マップが空であるかどうかを検出します |
27 | デフキー:のIterable [A] すべてのキー/ Pを返します> |
28 | デフ最後:(A、B) 最後の要素を返します。 |
29 | デフ最大:(A、B) 最大の要素を探します |
30 | デフ最小:(A、B) 最小の要素を探します |
31 | デフmkString:文字列 文字列として表示のすべての要素の集合 |
32 | デフ製品:(A、B) プロット内のデジタル要素のコレクションを返します。 |
33 | デフ削除(キー:A):オプション[B] 指定されたキーを削除します。 |
34 | デフ(:(A、Pを保持 Map.this.type:B)=>ブール) 彼らが会う場合の条件はtrueを返します |
35 | デフサイズ:のInt 地図内の要素の数を返します |
36 | デフ合計(A、B) デジタルのすべての要素のコレクションを返します |
37 | デフ尾:地図[A、B ] 最初の要素を除いて、他の要素のコレクションを返します。 |
38 | デフ取る(N:INT):マップ[A、B] 最初のn個の要素を返します。 |
39 | デフtakeRight(N:INT):マップ[A、B] 戻るn個の要素 |
40 | デフtakeWhile(P:((A 、B))=>ブール):マップ[A、B] 指定された条件が満たされた返しの要素 |
41 | デフのtoArray:配列[(A、 B)] 設定された転送アレイ |
42 | デフtoBuffer [B>:A] :バッファ[B] 地図のすべての要素を含むバックバッファ、 |
43 | デフToListメソッド:リスト[A] 戻るリストには、地図のすべての要素が含まれています |
44 | デフtoSeq:配列[A] バックのSeqは、すべての要素の地図が含まれています |
45 | デフtoSet:セット[A] 戻る地図のすべての要素を含む、設定 |
46 | デフのtoString():文字列 Stringオブジェクトを返します。 |
参照するより多くの方法APIドキュメント