scala入门学习(4)列表List-集合Set-映射Map等
2018-01-16 15:40
711 查看
一、列表List
1、List类型定义及List的特点
Scala 列表类似于数组,它们所有元素的类型都相同,但是它们也有所不同:列表是不可变的,值一旦被定义了就不能改变,其次列表 具有递归的结构(也就是链接表结构)而数组不是。//字符串类型List scala> val fruit=List("Apple","Banana","Orange") fruit: List[String] = List(Apple, Banana, Orange) //前一个语句与下面语句等同 scala> val fruit=List.apply("Apple","Banana","Orange") fruit: List[String] = List(Apple, Banana, Orange) //数值类型List scala> val nums=List(1,2,3,4,5) nums: List[Int] = List(1, 2, 3, 4, 5) //多重List,List的子元素为List scala> val diagMatrix=List(List(1,0,0),List(0,1,0),List(0,0,1)) diagMatrix: List[List[Int]] = List(List(1, 0, 0), List(0, 1, 0), List(0, 0, 1)) //遍历List scala> for (i <- nums) println("List Element: "+i)
2、List常用构造方法
构造列表的两个基本单位是 Nil 和 ::Nil 也可以表示为一个空列表。
//采用::及Nil进行列表构建 scala> val nums = 1 :: (2 :: (3 :: (4 :: Nil))) nums: List[Int] = List(1, 2, 3, 4) //由于::操作符的优先级是从右往左的,因此上一条语句等同于下面这条语句 scala> val nums=1::2::3::4::Nil nums: List[Int] = List(1, 2, 3, 4)
3、List基本操作
包括列表元素的判断(是否为空,是否以某个序列结尾、开头或者存在返回相应索引,)、增删、取值、取子列表、计算(求和、最大、最小、长度等),排序等基本操作scala> var a=List(1,2,3,4) a: List[Int] = List(1, 2, 3, 4) //为列表预添加元素 +:和:+ 的用法区别 scala> 5 +: a res50: List[Int] = List(5, 1, 2, 3, 4) scala> List(5,4) +: a res62: List[Any] = List(List(5, 4), 1, 2, 3, 4) scala> a +: 5 <console>:28: error: value +: is not a member of Int scala> a :+ 5 res59: List[Int] = List(1, 2, 3, 4, 5) scala>a :+ List(5,4) res60: List[Any] = List(1, 2, 3, 4, List(5, 4)) //判断是否为空 scala> a.isEmpty res108: Boolean = false //取第一个无素 scala> a.head res43: Int = 1 //取除第一个元素外剩余的元素,返回的是列表 scala> a.tail res44: List[Int] = List(2, 3, 4) //取列表第二个元素 scala> a.tail.head res115: Int = 2 //插入排序算法实现 def isort(xs: List[Int]): List[Int] = if (xs.isEmpty) Nil else insert(xs.head, isort(xs.tail)) def insert(x: Int, xs: List[Int]): List[Int] = if (xs.isEmpty || x <= xs.head) x :: xs else xs.head :: insert(x, xs.tail) //List连接操作 scala> List(1,2,3):::List(4,5,6) res116: List[Int] = List(1, 2, 3, 4, 5, 6) //取除最后一个元素外的元素,返回的是列表 scala> a.init res117: List[Int] = List(1, 2, 3) //取列表最后一个元素,返回元素值 scala> a.last res118: Int = 4 //列表元素倒置,返回新列表 scala> a.reverse.tail res45: List[Int] = List(3, 2, 1) scala> a.reverse.head res46: Int = 4 //丢弃前n个元素,返回新列表 scala> a drop 1 res124: List[Int] = List(2, 3, 4) scala> a.drop(3) res0: List[Int] = List(4) //dropRight(n: Int): List[A] 丢弃最后n个元素,并返回新列表 //获取前n个元素 scala> a take 1 res125: List[Int] = List(1) scala> a.take(3) res126: List[Int] = List(1, 2, 3) //去除列表的重复元素,并返回新列表 scala> a=a:+4;a.distinct a: List[Int] = List(1, 2, 3, 4, 4) res94: List[Int] = List(1, 2, 3, 4) //dropWhile(p: (A) => Boolean): List[A] //从左向右丢弃元素,直到条件p不成立 scala> a.dropWhile(_==1) res136: List[Int] = List(2, 3, 4, 4) scala> a.dropWhile(_==2) res137: List[Int] = List(1, 2, 3, 4, 4) scala> a.dropWhile(_==a.head) res138: List[Int] = List(2, 3, 4, 4) //endsWith[B](that: Seq[B]): Boolean //检测列表是否以指定序列结尾 scala> a.endsWith(List(4,3)) res145: Boolean = false scala> a.endsWith(List(4,4)) res146: Boolean = true scala> a.endsWith(List(4)) res147: Boolean = true scala> a.endsWith(List(3)) res148: Boolean = false //startsWith[B](that: Seq[B], offset: Int): Boolean //检测列表在指定位置是否包含指定序列 scala> a.startsWith(List(3,4),2) res95: Boolean = true scala> a.startsWith(List(3),2) res96: Boolean = true scala> a.startsWith(List(3),4) res97: Boolean = false scala> a.startsWith(List(3),1) res98: Boolean = false //equals(that: Any): Boolean //判断是否相等 scala> a.equals(List(1,2,3)) res150: Boolean = false scala> a.equals(List(1,2,3,4,4)) res151: Boolean = true //exists(p: (A) => Boolean): Boolean //判断列表中指定条件的元素是否存在。 scala> a.exists(x=> x>3) res159: Boolean = true scala> a.exists(_>3) res160: Boolean = true scala> a.exists(_>5) res161: Boolean = false //检测列表中是否包含指定的元素 scala> a.contains(5) res76: Boolean = false //计算列表长度,最大最小值 scala> a.length res2: Int = 4 scala> a.max res3: Int = 4 scala> a.min res4: Int = 1 scala> a.sum res5: Int = 10 //排序 scala> a.sorted res81: List[Int] = List(1, 2, 3, 4, 5)
4、List常用方法
列表的apply、range方法,列表链接,列表交集,列表的函数操作,列表元素的元素索引,列表分割//apply方法 scala> List.apply(1, 2, 3) res139: List[Int] = List(1, 2, 3) //range方法,构建某一值范围内的List scala> List.range(2, 6) res140: List[Int] = List(2, 3, 4, 5) //步长为2 scala> List.range(2, 6,2) res141: List[Int] = List(2, 4) //列表连接 scala> List.concat(List('a', 'b'), List('c')) res148: List[Char] = List(a , b, c) //字符串要加双引号 var b=List("woe","wow","adabosting","bostong","randormforest") b: List[String] = List(woe, wow, adabosting, bostong, randormforest) //filter(p: (A) => Boolean): List[A] //输出符号指定条件的所有元素。 scala> b.filter(_.length==3) res5: List[String] = List(woe, wow) //条件元素可以用字母=>字母 形式,也可以用_ scala> b.filter(x=>x.length==3) res6: List[String] = List(woe, wow) //indexOf(elem: A, from: Int): Int //从指定位置 from 开始查找元素第一次出现的位置 scala> b.indexOf("bost",0) res20: Int = -1 scala> b.indexOf("bostong",1) res22: Int = 3 // intersect(that: Seq[A]): List[A] //计算多个集合的交集 scala> var d=List(b.head) d: List[String] = List(woe) scala> b.intersect(d) res33: List[String] = List(woe) //lastIndexOf(elem: A, end: Int): Int //在指定的位置 end 开始查找元素最后出现的位置 scala> b.lastIndexOf("woe",4) res63: Int = 0 //截止第5个,最后一次出现的位置在0, scala> b.lastIndexOf("woe",5) res64: Int = 5 //返回值-1,说明不存在 scala> b.lastIndexOf("bostong",2) res65: Int = -1 //map[B](f: (A) => B): List[B] 通过给定的方法将所有元素重新计算 scala> b.map(_.length) res70: List[Int] = List(3, 3, 10, 7, 13, 3) //Zip操作 scala> val a=List(1,2,3,4) a: List[Int] = List(1, 2, 3, 4) scala> val chars=List('1','2','3','4') chars: List[Char] = List(1, 2, 3, 4) //返回的是List类型的元组(Tuple) scala> a zip chars res130: List[(Int, Char)] = List((1,1), (2,2), (3,3), (4,4)) //将列表进行分割 scala> a.splitAt(2) res127: (List[Int], List[Int]) = (List(1, 2),List(3, 4)) //前一个操作与下列语句等同 scala> (a.take(2),a.drop(2)) res128: (List[Int], List[Int]) = (List(1, 2),List(3, 4))
5、数据类型间的转换
列表元素类型转换,列表与其他类型(数组,集合,序列等)的转换//将列表的元素复制到数组中。 scala> var b=Array(5,6,7,8,9) b: Array[Int] = Array(5, 6, 7, 8, 9) scala> a.copyToArray(b,0,2) scala> b //其中a为1,2,3,4 res88: Array[Int] = Array(1, 2, 7, 8, 9) //List toString方法 scala> a.toString res131: String = List(1, 2, 3, 4,5) //List mkString方法 scala> a.mkString res132: String = 12345 scala> a.mkString("-") res77: String = 1-2-3-4-5 //转换成数组,可变数组 scala> a.toArray res103: Array[Int] = Array(1, 2, 3, 4, 5) scala> a.toBuffer res106: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 2, 3, 4, 5) //转换成序列 scala> a.toSeq res108: scala.collection.immutable.Seq[Int] = List(1, 2, 3, 4, 5) //转换成集合 scala> a.toSet res110: scala.collection.immutable.Set[Int] = Set(5, 1, 2, 3, 4)
二、Set(集合)
1、Set类型定义
Scala Set(集合)是没有重复的对象集合,所有的元素都是唯一的。Scala 集合分为可变的和不可变的集合。
默认情况下,Scala 使用的是不可变集合,如果你想使用可变集合,需要引用 scala.collection.mutable.Set 包。
//默认引用 scala.collection.immutable.Set,不可变集合 scala> val set = Set(1,2,3) set: scala.collection.immutable.Set[Int] = Set(1, 2, 3) scala> println(set.getClass.getName) scala.collection.immutable.Set$Set3 scala> println(set.exists(_ % 2 == 0)) true scala> println(set.drop(1)) Set(2, 3) //引入可变集合 import scala.collection.mutable.Set // 可以在任何地方引入 可变集合 scala> val mutableSet = Set(1,2,3) mutableSet: scala.collection.mutable.Set[Int] = Set(1, 2, 3) scala> println(mutableSet.getClass.getName) scala.collection.mutable.HashSet
2、基本操作
包括Set的增删、取值、取子集、计算(求和、最大、最小、长度等),判断(是否为空,是否存在满足条件的元素,集合是否相等)等基本操作//添加、删除元素,并创建一个新的集合,对于可变不可变均可如此操作,+/-变为+=/-=就是在原集合上增删,且可以多个元素 scala> a+5 res13: scala.collection.immutable.Set[Int] = Set(5, 1, 2, 3, 4) scala> a-5 res14: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 4) //注意:可变与不可变集合加入后,元素位置不一样 scala> a-(1,2) res19: scala.collection.immutable.Set[Int] = Set(3, 4) //取集合的第一个元素/最后一个元素,返回值为元素 scala> a.head res137: Int = 1 scala> a.last res145: Int = 4 //取集合的除第一个元素的所有,返回值为集合 scala> a.tail res158: scala.collection.mutable.Set[Int] = Set(2, 3, 4) //取集合的除最后一个元素的所有,返回值为集合 scala> a.init res138: scala.collection.mutable.Set[Int] = Set(1, 2, 3) //drop返回丢弃前n个元素新集合,dropRight返回丢弃最后n个元素新集合 scala> a.drop(2) res103: scala.collection.mutable.Set[Int] = Set(3, 4) scala> a.dropRight(2) res104: scala.collection.mutable.Set[Int] = Set(1, 2) //返回前 n 个元素/后n个元素,返回值为集合 scala> a.take(2) res159: scala.collection.mutable.Set[Int] = Set(1, 2) scala> a.takeRight(2) res160: scala.collection.mutable.Set[Int] = Set(3, 4) //遍历集 scala> for(i<-a)println(i) 1 2 3 4 //比较序列是否相等,equals、== scala> a.equals(Set(1,2,3,4)) res127: Boolean = true scala> a.equals(3) res128: Boolean = false scala> a==b res130: Boolean = false //判断集合是否为空 scala> a.isEmpty res139: Boolean = false //求最大、最小,和、长度(size)与数组的length不一样 scala> a.max res147: Int = 4 scala> a.min res148: Int = 1 scala> a.sum res149: Int = 10 scala> a.size res151: Int = 4 //求积 scala> a.product res154: Int = 24 //判断元素在集合中是否存在,返回布尔型 scala> a.contains(3) res35: Boolean = true scala> a(3) res36: Boolean = true scala> a.apply(5) res79: Boolean = false //判断满足条件的元素是否存在 scala> a.exists(_>3) res131: Boolean = true //判断所有元素是否满足条件 scala> a.forall(_>1) res135: Boolean = false
3、常见操作
Set的交集、并集、差集,是否为子集,集合元素的计算、统计,条件查询删除等操作。//计算满足指定条件的集合元素个数 scala> a.count(_>3) res84: Int = 1 scala> a.count(x=>x>3) res85: Int = 1 //通过给定的方法将所有元素重新计算 scala> a.map(_*2) res146: scala.collection.mutable.Set[Int] = Set(2, 6, 4, 8) //交集 scala> var a=Set(1,2,3,4);var a1=Set(7,8,9) a: scala.collection.mutable.Set[Int] = Set(1, 2, 3, 4) a1: scala.collection.mutable.Set[Int] = Set(9, 7, 8) scala> var b1=Set("c","d","e");var b=Set("a","b","c") b1: scala.collection.mutable.Set[String] = Set(c, d, e) b: scala.collection.mutable.Set[String] = Set(c, a, b) //可以使用 Set.& 方法或 Set.intersect 方法来查看两个集合的交集元素,返回集合。但是两个集合元素类型相同 scala> a.&(a1) res69: scala.collection.mutable.Set[Int] = Set() scala> a.intersect(a1) res70: scala.collection.mutable.Set[Int] = Set() //但是两个集合元素类型相同 scala> a.intersect(b) <console>:25: error: type mismatch; found : scala.collection.mutable.Set[String] required: scala.collection.GenSet[Int] a.intersect(b) //++ 可以合并两个集合,集合元素类型任意 scala> a++b res76: scala.collection.mutable.Set[Any] = Set(c, 1, 2, 3, a, 4, b) //注意类型变为了Any //差集&~、diff scala> a.&~(a1) res74: scala.collection.mutable.Set[Int] = Set(1, 2, 3, 4) scala> b.&~(b1) res75: scala.collection.mutable.Set[String] = Set(a, b) scala> b.diff(b1) res100: scala.collection.mutable.Set[String] = Set(a, b) //从左向右丢弃元素,直到条件p不成立,如下的取摸运算 scala> a.dropWhile(_%1==0) res120: scala.collection.mutable.Set[Int] = Set() scala> a.dropWhile(_%2==1) res121: scala.collection.mutable.Set[Int] = Set(2, 3, 4) //输出集合元素中符合指定条件的子集,返回值为集合 scala> a.filter(_>3) res132: scala.collection.mutable.Set[Int] = Set(4) //查找集合中满足指定条件的第一个元素,返回元素,并非下标索引 scala> a.find(_>1) res136: Option[Int] = Some(2) //集合是否是另一个集合的子集 scala> var b=Set(1,6,2,3,4,5);a.subsetOf(b) b: scala.collection.immutable.Set[Int] = Set(5, 1, 6, 2, 3, 4) res34: Boolean = true scala> var b=Set(1,6,2,3);a.subsetOf(b) b: scala.collection.immutable.Set[Int] = Set(1, 6, 2, 3) res35: Boolean = false
4、数据类型间的转换
Set元素的转换,set与数组、列表、序列间的转换。//集合所有元素作为字符串显示 scala> a.mkString res152: String = 1234 scala> a.mkString("-") res153: String = 1-2-3-4 //复制集合元素到数组 scala> var c=Array(5,6,7,8,9);a.copyToArray(c,0,2); c: Array[Int] = Array(1, 2, 7, 8, 9) //把集合拆分为两个容器,第一个由前 n 个元素组成,第二个由剩下的元素组成 scala> a.splitAt(2) res157: (scala.collection.mutable.Set[Int], scala.collection.mutable.Set[Int]) = (Set(1, 2),Set(3, 4)) //转为数组,可变和不可变均可 scala> a.toBuffer res162: scala.collection.mutable.Buffer[Int] = ArrayBuffer(1, 2, 3, 4) scala> a.toArray res163: Array[Int] = Array(1, 2, 3, 4) //转换为列表 scala> a.toList res164: List[Int] = List(1, 2, 3, 4) //转为序列 scala> a.toSeq res165: Seq[Int] = ArrayBuffer(1, 2, 3, 4) //返回一个字符串,以对象来表示 scala> a.toString res166: String = Set(1, 2, 3, 4)
三、Map(映射)
1、Map定义
Map(映射)是一种可迭代的键值对(key/value)结构。所有的值都可以通过键来获取。
Map 中的键都是唯一的。
Map 也叫哈希表(Hash tables)。
Map 有两种类型,可变与不可变,区别在于可变对象可以修改它,而不可变对象不可以。
默认情况下 Scala 使用不可变 Map。如果你需要使用可变集合,你需要显式的引入 import scala.collection.mutable.Map 类
在 Scala 中 你可以同时使用可变与不可变 Map:
// 空哈希表,键为字符串,值为整型 var A:Map[Char,Int] = Map() // Map 键值对演示 val colors = Map("red" -> "#FF0000", "azure" -> "#F0FFFF") // 空哈希表,默认是可变映射,可以使用 + 号添加 key-value 对; scala> A += ('I' -> 1) scala> A res5: Map[Char,Int] = Map(I -> 1) //其他的默认非可变,会报错 scala> colors+= ("L" ->"xx") <console>:23: error: value += is not a member of scala.collection.immutable.Map[String,String] colors+= ("L" ->"xx") //判断Map是否为空 scala> colors.isEmpty res18: Boolean = false //返回 Map 所有的键(key) scala> colors.keys res16: Iterable[String] = Set(red, azure) //返回 Map 所有的值(value) scala> colors.values res17: Iterable[String] = MapLike(#FF0000, #F0FFFF)
2、基本操作
Map的增删(元素和集合),取值或者丢弃值(返回元素,子Map)还有按条件取值或丢弃,最大、最小等基本运算,判断和条件判断(equals、contains、exists),过滤(filter、filterKeys、find)import scala.collection.mutable.Map scala> var maps=Map("a"->1,"b"->2,"c"->3,"d"->4,"e"->5) maps: scala.collection.mutable.Map[String,Int] = Map(e -> 5, b -> 2, d -> 4, a -> 1, c -> 3) //添加、删除元素,并创建一个新的集合,对于可变不可变均可如此操作,+/-变为+=/-=就是在原集合上增删 //注意:增加时必须是key-value;删除操作只需且仅要key,且可以多个元素的 scala> maps+=("f"->6) res35: scala.collection.mutable.Map[String,Int] = Map(e -> 5, b -> 2, d -> 4, a -> 1, c -> 3, f -> 6) scala> maps-=("f") res42: scala.collection.mutable.Map[String,Int] = Map(e -> 5, b -> 2, d -> 4, a -> 1, c -> 3) scala> maps+("f"->6,"g"->7) res57: scala.collection.mutable.Map[String,Int] = Map(b -> 2, d -> 4, g -> 7, a -> 1, c -> 3, f -> 6) //返回指定 key 的值,可以有get,apply方法,注意返回数据类型不同 scala> maps.get("a") res61: Option[Int] = Some(1) scala> maps.apply("b") res64: Int = 2 scala> maps("c") res65: Int = 3 //返回丢弃前n个元素新集合,dropWhile(p: ((A, B)) => Boolean): Map[A, B]从左向右丢弃元素,直到条件p不成立 scala> maps.drop(1) res66: scala.collection.mutable.Map[String,Int] = Map(b -> 2, d -> 4, a -> 1, c -> 3) //返回丢弃最后n个元素新集合 scala> maps.dropRight(1) res68: scala.collection.mutable.Map[String,Int] = Map(e -> 5, b -> 2, d -> 4, a -> 1) //返回所有元素,除了最后一个 scala> maps.init res74: scala.collection.mutable.Map[String,Int] = Map(e -> 5, b -> 2, d -> 4, a -> 1) //返回一个集合中除了第一元素之外的其他元素 scala> maps.tail res89: scala.collection.mutable.Map[String,Int] = Map(b -> 2, d -> 4, a -> 1, c -> 3) //返回前 n 个元素,takeWhile(p: ((A, B)) => Boolean): Map[A, B] 返回满足指定条件的元素 scala> maps.take(2) res90: scala.collection.mutable.Map[String,Int] = Map(e -> 5, b -> 2) //返回后 n 个元素 scala> maps.takeRight(2) res91: scala.collection.mutable.Map[String,Int] = Map(a -> 1, c -> 3) //返回最后一个元素 scala> maps.last res75: (String, Int) = (c,3) //查找最大最小元素 scala> maps.max res76: (String, Int) = (e,5) scala> maps.min res77: (String, Int) = (a,1) //移除指定 key scala> maps.remove("a") //返回 Map 元素的个数 scala> maps.size res87: Int = 5 //如果两个 Map 相等(key/value 均相等),返回true,否则返回false scala> maps.equals(maps1) res58: Boolean = true //判断Map 中是否存在指定 key,返回布尔型 scala> maps.contains("c") res38: Boolean = true scala> maps.contains("f") res39: Boolean = false //判断集合中指定条件的元素是否存在 scala> maps1.exists(_=="a"->1) res59: Boolean = true //返回满足指定条件的所有集合,filter和filterKeys scala> maps1.filter(_=="a"->1) res60: scala.collection.mutable.Map[String,Int] = Map(a -> 1) scala> maps1.filterKeys(_>"a") res63: scala.collection.Map[String,Int] = Map(e -> 5, b -> 2, d -> 4, c -> 3) //查找集合中满足指定条件的第一个元素,注意返回值数据类型 scala> maps1.find(_=="a"->1) res67: Option[(String, Int)] = Some((a,1))
3、常见操作
Map的复制,函数应用,合并和删除,计数count,以及清空返回Map。//从一个 Map 复制到另一个 Map scala> var maps1=maps.clone maps1: scala.collection.mutable.Map[String,Int] = Map(e -> 5, b -> 2, d -> 4, a -> 1, c -> 3) //将函数应用到集合的所有元素 scala> maps.keys.foreach{i=> | print(i);maps(i)*=2;println(maps(i)) | } e10 b4 d8 a2 c6 //Map 合并,可以使用 ++ 运算符或 Map.++() 方法来连接两个 Map,Map 合并时会移除重复的 key scala> maps++maps1 res74: scala.collection.mutable.Map[String,Int] = Map(e -> 5, b -> 2, d -> 4, a -> 1, c -> 3) //通过++/--将其他类型的元素添加删除进来,数组集合等皆可 scala> maps++=(Array("f"->6,"g"->7)) res56: scala.collection.mutable.Map[String,Int] = Map(b -> 2, d -> 4, g -> 7, a -> 1, c -> 3, f -> 6) scala> maps--=(Array("f","g")) res59: scala.collection.mutable.Map[String,Int] = Map(b -> 2, d -> 4, a -> 1, c -> 3) scala> maps++=(Set("f"->6,"g"->7)) res60: scala.collection.mutable.Map[String,Int] = Map(b -> 2, d -> 4, g -> 7, a -> 1, c -> 3, f -> 6) //计算满足指定条件的集合元素个数 scala> maps.count(_=="a"->1) res35: Int = 1 scala> maps.values.count(_>1) res36: Int = 4 //清空 Map scala> maps.clear scala> maps res63: scala.collection.mutable.Map[String,Int] = Map() //返回相同类型的空 Map scala> maps.empty
4、类型转换
Map和元素转换,转换为字符串,数组,集合,列表,序列。//复制Map值或者key到数组 scala> var c=Array(5,6,7,8,9);maps.values.copyToArray(c) c: Array[Int] = Array(5, 2, 4, 1, 3) //集合所有元素作为字符串显示 scala> maps.mkString res83: String = e -> 10b -> 4d -> 8a -> 2c -> 6 scala> maps.mkString(",") res84: String = e -> 10,b -> 4,d -> 8,a -> 2,c -> 6 //转为数组,可变和不可变均可 scala> maps.toArray res85: Array[(String, Int)] = Array((e,10), (b,4), (d,8), (a,2), (c,6)) scala> maps.toBuffer res86: scala.collection.mutable.Buffer[(String, Int)] = ArrayBuffer((e,10), (b,4), (d,8), (a,2), (c,6)) //转列表 scala> maps.toList res87: List[(String, Int)] = List((e,10), (b,4), (d,8), (a,2), (c,6)) //转序列Seq scala> maps.toSeq res88: Seq[(String, Int)] = ArrayBuffer((e,10), (b,4), (d,8), (a,2), (c,6)) //转集合Set scala> maps.toSet res89: scala.collection.immutable.Set[(String, Int)] = Set((b,4), (d,8), (a,2), (c,6), (e,10)) ///返回一个字符串,以对象来表示 scala> maps.toString res90: String = Map(e -> 10, b -> 4, d -> 8, a -> 2, c -> 6)
四、元组、Option、Iterator迭代器
1、元组
1.1 元组的定义和访问
与列表一样,元组也是不可变的,但与列表不同的是元组可以包含不同类型的元素。元组的值是通过将单个的值包含在圆括号中构成的。可以用如下两种方式定义:
val t = (1, 3.14, "Fred") val t = new Tuple3(1, 3.14, "Fred")
元组的实际类型取决于它的元素的类型,访问元组的元素可以通过数字索引,如我们可以使用 t._1 访问第一个元素, t._2 访问第二个元素
scala> val t = (4,3,2,1) t: (Int, Int, Int, Int) = (4,3,2,1) scala> val sum = t._1 + t._2 + t._3 + t._4 sum: Int = 10
1.2 元组的操作
迭代元组元组转为字符串
元素交换
//迭代元组 //可以使用 Tuple.productIterator() 方法来迭代输出元组的所有元素 scala> t.productIterator.foreach{ i =>println("Value = " + i )} Value = 4 Value = 3 Value = 2 Value = 1 //元组转为字符串 //可以使用 Tuple.toString() 方法将元组的所有元素组合成一个字符串 scala> val t = new Tuple3(1, "hello", Console) t: (Int, String, Console.type) = (1,hello,scala.Console$@1ad4bd6) scala> println("连接后的字符串为: " + t.toString() ) 连接后的字符串为: (1,hello,scala.Console$@1ad4bd6) //元素交换 //可以使用 Tuple.swap 方法来交换元组的元素。 scala> val t = new Tuple2("www.google.com", "www.runoob.com") t: (String, String) = (www.google.com,www.runoob.com) scala> println("交换后的元组: " + t.swap ) 交换后的元组: (www.runoob.com,www.google.com)
2、Option(选项)
2.1 Option(选项)定义
Scala Option(选项)类型用来表示一个值是可选的(有值或无值)。Option[T] 是一个类型为 T 的可选值的容器: 如果值存在, Option[T] 就是一个 Some[T] ,如果不存在, Option[T] 就是对象 None 。
val myMap: Map[String, String] = Map("key1" -> "value") val value1: Option[String] = myMap.get("key1") val value2: Option[String] = myMap.get("key2") println(value1) // Some("value1") println(value2) // None
在上面的代码中,myMap 一个是一个 Key 的类型是 String,Value 的类型是 String 的 hash map,但不一样的是他的 get() 返回的是一个叫 Option[String] 的类别。
Scala 使用 Option[String] 来告诉你:「我会想办法回传一个 String,但也可能没有 String 给你」。
myMap 里并没有 key2 这笔数据,get() 方法返回 None。
Option 有两个子类别,一个是 Some,一个是 None,当他回传 Some 的时候,代表这个函式成功地给了你一个 String,而你可以透过 get() 这个函式拿到那个 String,如果他返回的是 None,则代表没有字符串可以给你。
2.2 Option(选项)操作方法
这一块接触不多,以后如果用到的话再详细学习。可以参考http://www.runoob.com/scala/scala-options.html
3、Iterator(迭代器)
3.1 Iterator(迭代器)定义
Scala Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法。迭代器 it 的两个基本操作是 next 和 hasNext。
调用 it.next() 会返回迭代器的下一个元素,并且更新迭代器的状态。
调用 it.hasNext() 用于检测集合中是否还有元素。
让迭代器 it 逐个返回所有元素最简单的方法是使用 while 循环:
scala> val it = Iterator("Baidu", "Google", "Runoob", "Taobao") it: Iterator[String] = non-empty iterator scala> while (it.hasNext){ | println(it.next()) | } Baidu Google Runoob Taobao
3.2 Iterator(迭代器)常用方法
Scala Iterator 常用的方法比较多,基本上跟集合数组的方法一样。下面例子为基本用法示例。具体不过多列举:scala> var ita=Iterator(1,2,3,4,5);var itb=Iterator(10,20,30,40,50) ita: Iterator[Int] = non-empty iterator itb: Iterator[Int] = non-empty iterator scala> println("最大元素是:" + ita.max );println("最小元素是:" + itb.min ) 最大元素是:5 最小元素是:10 scala> ita.size res9: Int = 5 //注意迭代器的特性,再次使用就是空值 scala> ita.size res10: Int = 0
参考资料:1、《快学scala》
2、http://www.runoob.com/scala/scala-collections.html
3、http://blog.csdn.net/lovehuangjiaju/article/details/46984575
相关文章推荐
- Scala 数组(Array),列表(List),元组(Tuple),集(Set),映射(Map),迭代器(Iterator)
- JAVA集合 Set(集)、List(列表)、Map(映射)、Collection(接口)
- Java集合三种类型:Set<集>、List<列表>、Map<映射>
- [转]NHibernate集合映射中的set, list, map, bag, array
- Hibernate的集合映射(Set、List、Array、Map、Bag)
- Hibernate学习---第七节:数组&list&map&set的映射配置
- Hibernate在一对多映射下集合Set,List,Map的配置
- NHibernate集合映射中的set, list, map, bag, array
- NHibernate集合映射中的set, list, map, bag, array
- 【转载】Hibernate之hbm.xml集合映射的使用(Set集合映射,list集合映射,Map集合映射)
- [置顶] 【scala 代码片段2】轻松入门scala--列表的操作以及集合元素映射
- Hibernate常见的集合映射主要有Set,List,Array,Map,Bag .
- python学习六:异常处理、map/reduce/filter内置函数、python集合(set)类型、元组转列表
- 12 映射-- 集合类的映射(Set,List,Map,Array)
- Hibernate之集合映射的使用(Set集合映射,list集合映射,Map集合映射)
- 【学习笔记】Hibernate映射List、Map、数组、Set、Bag的具体操作
- NHibernate集合映射中的set, list, map, bag, array
- Hibernate (四) Set List Map 集合映射 和排序
- Scala中的集合:Iterator、BitSet、Set、Map、Stack、Vector、List、Array
- Scala集合,序列(可变和不可变List),List各种函数的使用,不可变Set和可变Set,Map