Scala Map是键/值对的集合。可以根据其键检索任何值,键在Map中是唯一的,但值不必是唯一的。
默认情况下,Scala使用不可变的Map。如果要使用可变Map,则必须显式导入 scala.collection.mutable.Map 类。如果您要同时使用可变Map和不可变Map,则可以继续将可变Map称为 Map ,但可以将可变集合称为 mutable.Map 。
以下是声明不可变Maps的示例语句-
//键是字符串,值是整数的空哈希表: var A:Map[Char,Int]=Map()//带有键和值的映射。 val colors=Map("red" -> "#FF0000", "azure" -> "#F0FFFF")
在定义空Map时,类型注释是必需的,因为系统需要为变量分配具体类型,如果要向Map添加键值对,可以按如下所示使用运算符+。
A +=(I -> 1) A +=(J -> 5) A +=(K -> 10) A +=(L -> 100)
Scala Maps - 基本操作
Map上的所有操作都可以通过以下三种方法表示。
| Sr.No | Methods & 描述 |
|---|---|
| 1 |
keys 此方法返回包含Map中每个键的Iterable。 |
| 2 |
values 此方法返回包含Map中每个值的iterable。 |
| 3 |
isEmpty 如果Map为空,则此方法返回true,否则返回false。 |
object Demo {
def main(args: Array[String]) {
val colors=Map("red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F")
val nums</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Map</span><span class="pun">[</span><span class="typ">Int</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Int</span><span class="pun">]=</span><span class="typ">Map</span><span class="pun">()</span><span class="pln">
println</span><span class="pun">(</span><span class="pln"> </span><span class="str">"Keys in colors : "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> colors</span><span class="pun">.</span><span class="pln">keys </span><span class="pun">)</span><span class="pln">
println</span><span class="pun">(</span><span class="pln"> </span><span class="str">"Values in colors : "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> colors</span><span class="pun">.</span><span class="pln">values </span><span class="pun">)</span><span class="pln">
println</span><span class="pun">(</span><span class="pln"> </span><span class="str">"Check if colors is empty : "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> colors</span><span class="pun">.</span><span class="pln">isEmpty </span><span class="pun">)</span><span class="pln">
println</span><span class="pun">(</span><span class="pln"> </span><span class="str">"Check if nums is empty : "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> nums</span><span class="pun">.</span><span class="pln">isEmpty </span><span class="pun">)</span><span class="pln">
}
}
将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。
\>scalac Demo.scala \>scala Demo
Keys in colors : Set(red, azure, peru) Values in colors : MapLike(#FF0000, #F0FFFF, #CD853F) Check if colors is empty : false Check if nums is empty : true
Scala Maps - 合并
您可以使用++运算符或Map。++()方法来连接两个或多个Map,但是在添加Map时,它将删除重复的键。
object Demo {
def main(args: Array[String]) {
val colors1=Map("red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F")
val colors2=Map("blue" -> "#0033FF", "yellow" -> "#FFFF00", "red" -> "#FF0000")
</span><span class="com">//多个map 则使用++运算符</span><span class="pln">
</span><span class="kwd">var</span><span class="pln"> colors</span><span class="pun">=</span><span class="pln">colors1 </span><span class="pun">++</span><span class="pln"> colors2
println</span><span class="pun">(</span><span class="pln"> </span><span class="str">"colors1 ++ colors2 : "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> colors </span><span class="pun">)</span><span class="pln">
</span><span class="com">//也可以使用.++函数方法</span><span class="pln">
colors</span><span class="pun">=</span><span class="pln">colors1</span><span class="pun">.++(</span><span class="pln">colors2</span><span class="pun">)</span><span class="pln">
println</span><span class="pun">(</span><span class="pln"> </span><span class="str">"colors1.++(colors2)) : "</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> colors </span><span class="pun">)</span><span class="pln">
}
}
将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。
\>scalac Demo.scala \>scala Demo
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)
打印Keys和Values
您可以使用" foreach"循环遍历Map的键和值,在这里,我们使用了与迭代器关联的方法 foreach 来遍历键。
object Demo {
def main(args: Array[String]) {
val colors=Map("red" -> "#FF0000", "azure" -> "#F0FFFF","peru" -> "#CD853F")
colors</span><span class="pun">.</span><span class="pln">keys</span><span class="pun">.</span><span class="kwd">foreach</span><span class="pun">{</span><span class="pln"> i </span><span class="pun">=></span><span class="pln">
</span><span class="kwd">print</span><span class="pun">(</span><span class="pln"> </span><span class="str">"Key="</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> i </span><span class="pun">)</span><span class="pln">
println</span><span class="pun">(</span><span class="str">" Value="</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> colors</span><span class="pun">(</span><span class="pln">i</span><span class="pun">)</span><span class="pln"> </span><span class="pun">)}</span><span class="pln">
}
}
将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。
\>scalac Demo.scala \>scala Demo
Key=red Value=#FF0000 Key=azure Value=#F0FFFF Key=peru Value=#CD853F
检查Key是否在Map中
您可以使用 Map.contains 方法测试Map中是否存在给定键。
object Demo {
def main(args: Array[String]) {
val colors=Map("red" -> "#FF0000", "azure" -> "#F0FFFF", "peru" -> "#CD853F")
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln"> colors</span><span class="pun">.</span><span class="pln">contains</span><span class="pun">(</span><span class="pln"> </span><span class="str">"red"</span><span class="pln"> </span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
println</span><span class="pun">(</span><span class="str">"Red key exists with value :"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> colors</span><span class="pun">(</span><span class="str">"red"</span><span class="pun">))</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
println</span><span class="pun">(</span><span class="str">"Red key does not exist"</span><span class="pun">)</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
</span><span class="kwd">if</span><span class="pun">(</span><span class="pln"> colors</span><span class="pun">.</span><span class="pln">contains</span><span class="pun">(</span><span class="pln"> </span><span class="str">"maroon"</span><span class="pln"> </span><span class="pun">))</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
println</span><span class="pun">(</span><span class="str">"Maroon key exists with value :"</span><span class="pln"> </span><span class="pun">+</span><span class="pln"> colors</span><span class="pun">(</span><span class="str">"maroon"</span><span class="pun">))</span><span class="pln">
</span><span class="pun">}</span><span class="pln"> </span><span class="kwd">else</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
println</span><span class="pun">(</span><span class="str">"Maroon key does not exist"</span><span class="pun">)</span><span class="pln">
</span><span class="pun">}</span><span class="pln">
}
}
将上述程序保存在 Demo.scala 中。以下命令用于编译和执行该程序。
\>scalac Demo.scala \>scala Demo
Red key exists with value :#FF0000 Maroon key does not exist
Scala Maps - 方法
以下是在玩Map时可以使用的重要方法,有关可用方法的完整列表,请查看Scala的官方文档。
| Sr.No | Methods with 描述 |
|---|---|
| 1 |
def ++(xs: Map[(A, B)]): Map[A, B] 返回一个新Map,其中包含该Map以及xs提供的Map。 |
| 2 |
def-(elem1:A,elem2:A,elems:A *):Map [A,B] 返回一个新Map,其中包含该Map的所有Map,但键等于elem1,elem2或任何elems的Map除外。 |
| 3 |
def-(xs:GTO [A]):Map[A,B] 返回具有该Map的所有键/值Map关系的新Map,但键与可遍历对象xs中的键相等的Map除外。 |
| 4 |
def get(key:A):options[B] (可选)返回与键关联的值。 |
| 5 |
def iterator:Iterator [(A,B)] 在此Map的所有键/值对上创建一个新的迭代器 |
| 6 |
def addString(b:StringBuilder):StringBuilder 将此收缩集合的所有元素追加到字符串生成器。 |
| 7 |
def addString(b:StringBuilder,sep:String):StringBuilder 使用分隔符字符串将此收缩集合的所有元素附加到字符串生成器。 |
| 8 |
def apply(key:A):B 返回与给定键关联的值,或者返回Map默认方法的输出(如果不存在)。 |
| 9 |
def clear():Unit 从Map上删除所有绑定。此操作完成后,Map将为空。 |
| 10 |
def clone():Map[A,B] 创建接收者对象的副本。 |
| 11 |
def contains(key:A):Boolean 如果此Map中有键的绑定,则返回true,否则返回false。 |
| 12 |
def copyToArray(xs:Array [(A,B)]):Unit 将此可收缩集合的值复制到数组。用此收缩集合的值填充给定数组xs。 |
| 13 |
def count(p: ((A, B)) => Boolean): Int 计算可收缩集合中满足断言的元素数。 |
| 14 |
def default(key:A):B 定义Map的默认值计算,当找不到键时返回。 |
| 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] 删除满足断言的元素的最长前缀。 |
| 18 |
def empty:Map[A,B] 返回相同类型的空Map。 |
| 19 |
def equals(that:Any):Boolean 如果两个Map都包含完全相同的键/值,则返回true,否则返回false。 |
| 20 |
def exists(p: ((A, B)) => Boolean): Boolean 如果给定断言p包含此可收缩集合的某些元素,则返回true,否则返回false。 |
| 21 |
def filter(p: ((A, B))=> Boolean): Map[A, B] 返回此可收缩集合中所有满足断言的元素。 |
| 22 |
def filterKeys(p: (A) => Boolean): Map[A, B] 返回一个不可变的Map,该Map仅由该Map的那些键满足断言p的键值对组成。 |
| 23 |
def find(p: ((A, B)) => Boolean): Option[(A, B)] 查找满足断言(如果有)的可收缩集合的第一个元素。 |
| 24 |
def foreach(f: ((A, B)) => Unit): Unit 将函数f应用于此收缩集合的所有元素。 |
| 25 |
def init:Map [A,B] 返回除最后一个元素外的所有元素。 |
| 26 |
def isEmpty:Boolean 测试Map是否为空。 |
| 27 |
def keys:Iterable[A] 返回所有键上的迭代器。 |
| 28 |
def last:(A,B) 返回最后一个元素。 |
| 29 |
def max:(A,B) 查找最大的元素。 |
| 30 |
def min:(A,B) 查找最小的元素。 |
| 31 |
def mkString:String 以字符串显示此可收缩集合的所有元素。 |
| 32 |
def product:(A,B) 返回相对于num中的*运算符,此收缩集合的所有元素的乘积。 |
| 33 |
def remove(key:A):Options[B] 从此Map中删除键,并作为可选返回先前与该键关联的值。 |
| 34 |
def retain(p: (A, B) => Boolean): Map.this.type 仅保留断言p返回true的那些Map。 |
| 35 |
def size:Int 返回此Map中的元素数。 |
| 36 |
def sum:(A,B) 相对于num中的+运算符,返回此可收缩集合的所有元素的总和。 |
| 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的所有元素的列表。 |
| 44 |
def toSeq:Seq [A] 返回包含此Map的所有元素的seq。 |
| 45 |
def toSet:Set[A] 返回一个包含此Map的所有元素的集合。 |
| 46 |
def toString():String 返回对象的字符串表示形式。 |