美文网首页
Scala编程基础19:Scala映射

Scala编程基础19:Scala映射

作者: 金字塔下的小蜗牛 | 来源:发表于2020-04-08 08:17 被阅读0次

    Scala映射Map是一种可迭代的键值对(key/value)结构。所有的键都是唯一的;所有的值都可以通过键来获取。Map也叫做哈希表Hash Table。Map有两种类型,可变的和不可变的。默认情况下,Scala使用不可变Map,即使用的是scala.collection.immutable.Map包;如果需要使用可变的Map,需要导入scala.collection.mutable.Map包。

    1.Map的定义

    不可变映射的使用:

    object Test1 {
        def main(args:Array[String]){
            val map1 = Map("one"->1,"two"->2,"three"->3);
            println(map1.getClass.getName);
            println(map1);
        }
    }
    

    编译并执行以上代码,输出结果如下:

    E:\Scala>scalac Test1.scala
    E:\Scala>scala Test1
    scala.collection.immutable.Map$Map3
    Map(one -> 1, two -> 2, three -> 3)

    可变映射的使用:

    import scala.collection.mutable.Map;
        object Test2{
            def main(args:Array[String]){
            val colors = Map("red"->"#FF0000","green"->"#00FF00","blue"->"#0000FF");
            println(colors.getClass.getName);
            println(colors);
            colors += ("white"->"#000000");
            println(colors);
        }
    }
    

    编译并执行以上代码,输出结果如下:

    E:\Scala>scalac Test2.scala
    E:\Scala>scala Test2
    scala.collection.mutable.HashMap
    Map(green -> #00FF00, red -> #FF0000, blue -> #0000FF)
    Map(green -> #00FF00, white -> #000000, red -> #FF0000, blue -> #0000FF)

    2.Map基本操作

    Scala Map有三个基本操作:

    • keys返回Map对象所有的键key
    • values返回Map对象所有的值value
    • isEmpty在Map对象为空时返回true

    以下实例演示了Map三个基本操作的使用:

    object Test3{
        def main(args:Array[String]){
            val colors = Map("red"->"#FF0000","green"->"#00FF00","blue"->"#0000FF");
            val empty = Map();
            println("colors.keys = "+colors.keys);
            println("colors.values = "+colors.values);
            println("colors.isEmpty = "+colors.isEmpty);
            println("empty.isEmpty = "+empty.isEmpty);
        }
    }
    

    编译并执行上述代码,输出结果如下:

    E:\Scala>scalac Test3.scala
    E:\Scala>scala Test3
    colors.keys = Set(red, green, blue)
    colors.values = MapLike.DefaultValuesIterable(#FF0000, #00FF00, #0000FF)
    colors.isEmpty = false
    empty.isEmpty = true

    3.Map合并操作

    使用++运算符或者Map.++()方法可以合并两个Map,Map合并时会移除重复的key:

    object Test4 {
        def main(args:Array[String]){
            val map1 = Map("one"->1,"two"->2,"three"->3);
            println(map1);
            val map2 = Map("one"->1,"three"->3,"five"->5);
            println(map2);
            val res1 = map1++map2;
            println("map1++map2 = " + res1);
            val res2 = map1.++(map2);
            println("map1.++(map2) = " + res1);
        }
    }
    

    编译并执行以上代码,输出结果如下:

    E:\Scala>scalac Test4.scala
    E:\Scala>scala Test4
    Map(one -> 1, two -> 2, three -> 3)
    Map(one -> 1, three -> 3, five -> 5)
    map1++map2 = Map(one -> 1, two -> 2, three -> 3, five -> 5)
    map1.++(map2) = Map(one -> 1, two -> 2, three -> 3, five -> 5)

    4.Map输出操作

    可以通过foreach循环输出Map的keys和values:

    object Test5 {
        def main(args:Array[String]){
            val colors = Map("red"->"#FF0000","green"->"#00FF00","blue"->"#0000FF");
            colors.keys.foreach{ key =>
                print("key = " + key)
                println(", value = " + colors(key))
            }
        }
    }
    

    编译并执行以上代码,输出结果如下:

    E:\Scala>scalac Test5.scala
    E:\Scala>scala Test5
    key = red, value = #FF0000
    key = green, value = #00FF00
    key = blue, value = #0000FF

    5.Map包含操作

    可以使用Map.contains方法来查看Map中是否存在指定的key:

    object Test6 {
        def main(args:Array[String]){
            val colors = Map("red"->"#FF0000","green"->"#00FF00","blue"->"#0000FF");
            println(colors);
            if(colors.contains("red")){
                println("red = " + colors("red"));
            }
            else{
                println("red does not exist");
            }
            if(colors.contains("black")){
                println("black = " + colors("black"));
            }
            else{
                println("black does not exist");
            }
        }
    }
    

    编译并执行上述代码,输出结果如下:

    E:\Scala>scalac Test6.scala
    E:\Scala>scala Test6
    Map(red -> #FF0000, green -> #00FF00, blue -> #0000FF)
    red = #FF0000
    black does not exist

    6.Map常用方法

    下面列出了Scala Map类型常用的方法:

    def ++(xs: Map[(A, B)]): Map[A, B]
    返回一个新的 Map,新的 Map xs 组成

    def -(elem1: A, elem2: A, elems: A*): Map[A, B]
    返回一个新的 Map, 移除 key 为 elem1, elem2 或其他 elems。

    def –(xs: GTO[A]): Map[A, B]
    返回一个新的 Map, 移除 xs 对象中对应的 key

    def get(key: A): Option[B]
    返回指定 key 的值

    def iterator: Iterator[(A, B)]
    创建新的迭代器,并输出 key/value 对

    def addString(b: StringBuilder): StringBuilder
    将 Map 中的所有元素附加到StringBuilder,可加入分隔符

    def addString(b: StringBuilder, sep: String): StringBuilder
    将 Map 中的所有元素附加到StringBuilder,可加入分隔符

    def apply(key: A): B
    返回指定键的值,如果不存在返回 Map 的默认方法

    def clear(): Unit
    清空 Map

    def clone(): Map[A, B]
    从一个 Map 复制到另一个 Map

    def contains(key: A): Boolean
    如果 Map 中存在指定 key,返回 true,否则返回 false。

    def copyToArray(xs: Array[(A, B)]): Unit
    复制集合到数组

    def count(p: ((A, B)) => Boolean): Int
    计算满足指定条件的集合元素数量

    def default(key: A): B
    定义 Map 的默认值,在 key 不存在时返回。

    def drop(n: Int): Map[A, B]
    返回丢弃前n个元素新集合

    def dropRight(n: Int): Map[A, B]
    返回丢弃最后n个元素新集合

    def dropWhile(p: ((A, B)) => Boolean): Map[A, B]
    从左向右丢弃元素,直到条件p不成立

    def empty: Map[A, B]
    返回相同类型的空 Map

    def equals(that: Any): Boolean
    如果两个 Map 相等(key/value 均相等),返回true,否则返回false

    def exists(p: ((A, B)) => Boolean): Boolean
    判断集合中指定条件的元素是否存在

    def filter(p: ((A, B))=> Boolean): Map[A, B]
    返回满足指定条件的所有集合

    def filterKeys(p: (A) => Boolean): Map[A, B]
    返回符合指定条件的不可变 Map

    def find(p: ((A, B)) => Boolean): Option[(A, B)]
    查找集合中满足指定条件的第一个元素

    def foreach(f: ((A, B)) => Unit): Unit
    将函数应用到集合的所有元素

    def init: Map[A, B]
    返回所有元素,除了最后一个

    def isEmpty: Boolean
    检测 Map 是否为空

    def keys: Iterable[A]
    返回所有的key/p>

    def last: (A, B)
    返回最后一个元素

    def max: (A, B)
    查找最大元素

    def min: (A, B)
    查找最小元素

    def mkString: String
    集合所有元素作为字符串显示

    def product: (A, B)
    返回集合中数字元素的积。

    def remove(key: A): Option[B]
    移除指定 key

    def retain(p: (A, B) => Boolean): Map.this.type
    如果符合满足条件的返回 true

    def size: Int
    返回 Map 元素的个数

    def sum: (A, B)
    返回集合中所有数字元素之和

    def tail: Map[A, B]
    返回一个集合中除了第一元素之外的其他元素

    def take(n: Int): Map[A, B]
    返回前 n 个元素

    def takeRight(n: Int): Map[A, B]
    返回后 n 个元素

    def takeWhile(p: ((A, B)) => Boolean): Map[A, B]
    返回满足指定条件的元素

    def toArray: Array[(A, B)]
    集合转数组

    def toBuffer[B >: A]: Buffer[B]
    返回缓冲区,包含了 Map 的所有元素

    def toList: List[A]
    返回 List,包含了 Map 的所有元素

    def toSeq: Seq[A]
    返回 Seq,包含了 Map 的所有元素

    def toSet: Set[A]
    返回 Set,包含了 Map 的所有元素

    def toString(): String
    返回字符串对象

    相关文章

      网友评论

          本文标题:Scala编程基础19:Scala映射

          本文链接:https://www.haomeiwen.com/subject/dmskdhtx.html