Scala系列:Map和Tuple

Map

构造Map

不可变:

val map = Map("sa" -> 1, "s" -> 2)
map("sa") = 3 // error

val emptyMap = new scala.collection.immutable.HashMap[String, Int]

可变:

val map2 = scala.collection.mutable.Map("sa" -> 2)
map2("sa") = 3

val emptyMap = new scala.collection.mutable.HashMap[String, Int]

注:->用来创建元组, "sa" -> 1即("sa", 1)

初始化完全可以 val map = Map(("sa", 1), ("s", 2))

获取Map中的值:

如果map中不包含请求中使用的key值,则抛异常。NoSuchElementException

  map("sa") // 类似于java中的map.get("sa")

要检查map中是否包含某个key,使用contains方法。

  val sa = if (map2.contains("sa3")) map2("sa3") else 0;

快捷的方式:

  val sa2 = map.getOrElse("sa2", 0)

一次得到是否包含key,并获取值:

  val sa3 = map.get("sa3"); // Option类型,
  println(sa3.isEmpty)

更新Map中的值:

添加或更新:

  map("sa") = 3

添加或更新多个:

  map += ("aa" -> 4, "bb" -> 5)

移除某个key和对应的值:

  map -= "aa"

不可变的map也可以使用+和-操作,但是会生成新的map

  var map = Map("aa" -> 1)

  map = map + ("bb" -> 2)

  map += ("cc" -> 2)

  map -= "aa"

迭代map:

for ((k, v) <- map) {

  // TODO

}

所有key:

  map.keySet

所有值:

  map.values

反转:

  map2 = for((k, v) <- map) yield (v, k)

已排序Map:

按key排序:

  SortedMap

按添加顺序:

  LinkedHashMap

Map与Java互操作:

Java Properties转为scala.collection.Map:

  import scala.collection.JavaConversions.propertiesAsScalaMap
  val prop: scala.collection.Map[String, String] = System.getProperties();

Java Map转为scala.collection.mutable.Map[String, Int]:

  import scala.collection.JavaConversions.mapAsScalaMap
  val map: scala.collection.mutable.Map[String, Int] = new TreeMap[String, Int]

Scala Map转为Java Map:

  import scala.collection.JavaConversions.mapAsJavaMap
  import java.awt.font.TextAttribute._
  var fs = Map(FAMILY -> "Serif", SIZE -> 12)
  var fonts = new Font(fs)

元组Tuple:

不同类型值的集合

  val tp = (1, "ss", 2.0)

访问数值:

  tp._1

  tp._2

  tp._3

  下标从1开始

通过模式匹配获取元组:

  val (first, second, third) = set

可以用于函数返回多个值的时候

拉链操作

val arrkey = Array(1, 3, 5)
val arrValue = Array("a", "b", "c")
val tupleArr = arrkey.zip(arrValue) // tupleArr为Array((1,a), (3,b), (5,c))
val map = tupleArr.toMap

时间: 2024-10-25 20:48:00

Scala系列:Map和Tuple的相关文章

Scala 系列(六)—— 常用集合类型之 List &amp; Set

一.List字面量 List 是 Scala 中非常重要的一个数据结构,其与 Array(数组) 非常类似,但是 List 是不可变的,和 Java 中的 List 一样,其底层实现是链表. scala> val list = List("hadoop", "spark", "storm") list: List[String] = List(hadoop, spark, storm) // List 是不可变 scala> list

好程序员大数据学习路线分享Scala系列之集合操作函数

好程序员大数据学习路线继续为大家分享Scala系列之集合操作函数4.6 集合的重要函数4.6.1sum/max/min/count在序列中查找最大或最小值是一个极常见的需求,如下:val numbers = Seq(11, 2, 5, 1, 6, 3, 9) numbers.max //11 numbers.min //1 更高级的例子,其中包含一个书的序列case class Book(title: String, pages: Int) val books = Seq( Book("Futu

好程序员大数据教程分享Scala系列之Option_偏函数_String

好程序员大数据教程分享Scala系列之Option_偏函数_StringOption类型在Scala中Option类型样例类用来表示可能存在或也可能不存在的值(Option的子类有Some和None).Some包装了某个值,None表示没有值. object OptionDemo {def main(args: Array[String]) {val map = Map("a" -> 1, "b" -> 2)val v = map.get("b

好程序员大数据教程Scala系列之样例类_Option_偏函数

好程序员大数据教程Scala系列之样例类_Option_偏函数,在Scala中Option类型样例类用来表示可能存在或也可能不存在的值(Option的子类有Some和None).Some包装了某个值,None表示没有值. object?OptionDemo {??def?main(args: Array[String]) {????val?map = Map("a"?-> 1, "b"?-> 2)????val?v = map.get("b&q

好程序员大数据教程分享Scala系列之模式匹配和样例类

好程序员大数据教程分享Scala系列之模式匹配和样例类1.样例类在Scala中样例类是一中特殊的类,样例类是不可变的,可以通过值进行比较,可用于模式匹配.定义一个样例类:1.构造器中每一个参数都是val,除非显示地声明为var 2.伴生对象提供apply ,让你不使用new关键字就能构造出相应的对象case class Point(x: Int, y: Int)创建样例类对象:val point = Point(1, 2)val anotherPoint = Point(1, 2)val yet

Scala集合Map

在scala中Map分为可变长(mutable)和不可变长(immutable) /** * 不可变长map 长度一旦初始化,就不能在进行更改 */ // 通过箭头的方式创建map val map = Map("name" -> "leo", "age" -> 16, "sex" -> "男") // 通过对偶元组的方式创建map val map1 = Map(("name&qu

好程序员大数据学习路线分享Scala系列之泛型

好程序员大数据学习路线分享Scala系列之泛型,带有一个或多个类型参数的类是泛型的. 泛型类的定义: //带有类型参数A的类定义class Stack[A] {private var elements: List[A] = Nil//泛型方法def push(x: A) { elements = x :: elements }def peek: A = elements.headdef pop(): A = {val currentTop = peekelements = elements.ta

大数据教程Scala系列之方法的嵌套和方法多态

大数据教程为大家分享Scala系列之方法的嵌套和方法多态方法里嵌套定义其他方法示例1object EmbedDemo { def add3(x:Int,y:Int,z:Int)={def add2(x:Int,y:Int)={x+y}add2(add2(x,y),z)} def main(args: Array[String]): Unit = {println(add3(1,2,3)) //6}}示例2def factorial(x: Int): Int = {def fact(x: Int,

大数据Scala系列之文件以及正则表达式

大数据Scala系列之文件以及正则表达式1 读取行导入scala.io.Source后,即可引用Source中的方法读取文件信息. import scala.io.Sourceobject FileDemo extends App{val source = Source.fromFile("C:/Users/admin/res.txt")//返回一个迭代器val lines = source.getLines()for(i <- lines)println(i)//内容也可以放到