首页 > 其他分享 >无涯教程-Scala Maps函数

无涯教程-Scala Maps函数

时间:2024-01-27 13:31:36浏览次数:27  
标签:返回 Map Scala Demo 元素 无涯 Maps colors def

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: Map[Int, Int]=Map() println( "Keys in colors : " + colors.keys ) println( "Values in colors : " + colors.values ) println( "Check if colors is empty : " + colors.isEmpty ) println( "Check if nums is empty : " + nums.isEmpty ) } }

将上述程序保存在 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")

      //多个map 则使用++运算符
      var colors=colors1 ++ colors2
      println( "colors1 ++ colors2 : " + colors )

      //也可以使用.++函数方法
      colors=colors1.++(colors2)
      println( "colors1.++(colors2)) : " + colors )
   }
}

将上述程序保存在 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.keys.foreach{ i =>  
         print( "Key=" + i )
         println(" Value=" + colors(i) )}
   }
}

将上述程序保存在 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")

      if( colors.contains( "red" )) {
         println("Red key exists with value :"  + colors("red"))
      } else {
           println("Red key does not exist")
      }
      
      if( colors.contains( "maroon" )) {
         println("Maroon key exists with value :"  + colors("maroon"))
      } else {
         println("Maroon key does not exist")
      }
   }
}

将上述程序保存在 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

返回对象的字符串表示形式。

参考链接

https://www.learnfk.com/scala/scala-maps.html

标签:返回,Map,Scala,Demo,元素,无涯,Maps,colors,def
From: https://blog.51cto.com/u_14033984/9443573

相关文章

  • 无涯教程-Scala Sets函数
    ScalaSets是同一类型的不同元素的集合,换句话说,集合是不包含重复元素的集合。默认情况下,Scala使用不可变的Set。如果要使用可变Set,则必须显式导入scala.collection.mutable.Set类,如果要在同一集合中同时使用可变集和不可变集,则可以继续将不可变集称为Set,但可以将可变集称为......
  • 无涯教程-Scala Lists函数
    Scala列表与数组非常相似,这意味着列表的所有元素都具有相同的类型,但是有两个重要的区别,首先,列表是不可变的,这意味着列表的元素无法通过分配进行更改。元素类型为T的列表的类型写为List[T]。//字符串列表valfruit:List[String]=List("apples","oranges","pears")//整......
  • 无涯教程-Scala - Partially Applied Functions函数
    调用函数时,据说是将函数应用于参数。如果传递所有期望的参数,则说明已完全应用了它。如果仅发送几个参数,则将返回部分应用的函数。这使您可以方便地绑定一些参数,并在以后填充其余参数。尝试以下操作,它是显示部分应用功能的简单示例程序-例importjava.util.Dateobject......
  • 无涯教程-Scala - Currying Functions函数
    Currying将一个包含多个参数的函数转换为一个函数链,每个函数都包含一个参数。咖喱函数定义了多个参数列表,如下所示-语法defstrcat(s1:String)(s2:String)=s1+s2另外,您也可以使用以下语法来定义咖喱函数-语法defstrcat(s1:String)=(s2:String)=>s1+s2......
  • 无涯教程-Scala - Functions with Named Arguments函数
    在普通函数调用中,调用中的参数按照被调用函数的参数顺序一一匹配。命名参数允许您以不同顺序将参数传递给函数。语法很简单,每个参数前面都有一个参数名称和一个等号。尝试下面的程序,这是一个显示带有命名参数的函数的简单示例。例objectDemo{defmain(args:Array[S......
  • 无涯教程-Scala - Functions Call-by-Name函数
    通常,函数的参数是按值参数;也就是说,参数的值是在传递给函数之前确定的。但是,如果我们需要编写一个函数,该函数接受在函数中被调用之前不希望对其求值的表达式作为参数,该怎么办?在这种情况下,Scala提供了按姓名呼叫参数。按名称的呼叫机制将代码块传递给该呼叫,并且每次该呼叫......
  • 无涯教程-Scala - do-while 循环函数
    与while循环在循环顶部测试循环条件不同,do-while循环在循环底部检查其条件,do-while循环与while循环相似,除了保证do-while循环至少执行一次do-while-语法以下是do-while循环的语法。do{statement(s);}while(condition);do-while-流程图尝试使用以下示例......
  • 无涯教程-Scala - while 循环函数
    在给定条件为真时重复一个语句或一组语句,它在执行循环体之前判断条件,只要给定条件为真,while循环语句就会重复执行目标语句。while-语法以下是while循环的语法。while(condition){statement(s);}while-流程图while-示例objectDemo{defmain(args:Array[......
  • 无涯教程-Scala - 文件I/O
    Scala开放使用任何Java对象,java.io.File是可在Scala编程中用于读取和写入文件的对象之一。importjava.io._objectDemo{defmain(args:Array[String]){valwriter=newPrintWriter(newFile("test.txt"))writer.write("HelloScala")writer......
  • 无涯教程-Scala - 提取器
    Scala中的提取器Extractors是一个对象,该对象具有称为unapply的方法,该方法的目的是匹配值并将其拆开。让我们以对象定义apply和unapply方法为示例,apply方法的含义与以往相同:它将Test变成一个对象,该对象可以以与应用方法相同的方式应用于括号中的参数。因此,您可以编写Te......