Scala Immutable Collection(集合)
来源:互联网 发布:淘宝店客户具体地址 编辑:程序博客网 时间:2024/06/06 03:33
1.scala.collection.immutable
层次结构如下:
- List使用
scala> val a = List(1,2,3,4)a: List[Int] = List(1, 2, 3, 4)scala> val b = 0 :: a // 0连接ab: List[Int] = List(0, 1, 2, 3, 4)scala> val c = "x" :: "y" :: "z" ::Nil //z连接Nill连接y连接zc: List[String] = List(x, y, z)scala> val d =a :: cd: List[java.io.Serializable] = Lisscala> a.headres0: Int = 1scala> c.headres1: String = xscala> d.headres2: java.io.Serializable = List(1//尾链表除了第一个后面的都是尾巴scala> a.tailres3: List[Int] = List(2, 3, 4)scala> c.tailres4: List[String] = List(y, z)scala> d.tailres5: List[java.io.Serializable] = List(x, y, z)scala> a.isEmpty //判断是否为空res6: Boolean = falsescala> Nil.isEmptyres7: Boolean = truescala> def walkthru(l: List[Int]): String = { | if(l.isEmpty) "" | else l.head.toString + " " +walkthru(l.tail) | }walkthru: (l: List[Int])Stringscala> walk(a)scala> walkthru(a)res9: String = "1 2 3 4 "
2.Scala List高级函数
/* filter */scala> a.filter(x => x %2 ==1)res10: List[Int] = List(1, 3)/*找出链表里面的数字*/scala> "xiao17is".toList.filter(x => Character.isDigit(x))res14: List[Char] = List(1, 7)/*检查链表中不等于s的值输出 x不等于s就是true */ scala> "xiao17is".toList.takeWhile(x => x!= 's')res16: List[Char] = List(x, i, a, o, 1, 7, i)
- map
scala> cres18: List[String] = List(x, y, z)scala> c.map(x=>x.toUpperCase)res20: List[String] = List(X, Y, Z)scala> c.map(_.toUpperCase)res21: List[String] = List(X, Y, Z)scala> a.filter(_%2==1)res22: List[Int] = List(1, 3)scala> a.filter(_%2==1).map(_+10)res23: List[Int] = List(11, 13)/* 两层的List*/scala> val q = List(a,List(4,5,6))q: List[List[Int]] = List(List(1, 2, 3, 4), List(4, 5, 6))scala> q.map(_.filter(_%2 == 0))res24: List[List[Int]] = List(List(2, 4), List(4, 6))/合二为一List flatMap*/scala> q.flatMap(_.filter(_%2 == 0))res27: List[Int] = List(2, 4, 4, 6)
4.reduceLeft 和foldLeft
scala> a.reduceLeft((x,y) => x+y)res28: Int = 10scala> a.reduce(_+_)res29: Int = 10
foldLeft更通用
scala> ares32: List[Int] = List(1, 2, 3, 4)scala> a.foldLeft(0)(_+_)res30: Int = 10scala> a.foldLeft(1)(_+_)res31: Int = 11
5.Range
1. range是个整数数列
scala> 1 to 10res33: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4,5.6,,7,8, 9, 10)/*range 和 until 的区别 */scala> 1 to 3res34: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3)scala> 1 until 3res38: scala.collection.immutable.Range = Range(1, 2)scala> 1 to 10 by 2 //步长为2res35: scala.collection.immutable.Range = Range(1, 3, 5, 7, 9)scala> (1 to 10 ).toList //链表的形势表示res37: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
2.Stream
Stream is a lazy List(惰性列表)
scala> 1 #:: 2 #:: 3#:: Stream.emptyres39: scala.collection.immutable.Stream[Int] = Stream(1, ?)/*第一个是确定的后面的值需要时候才会求,按需求值*/scala> val stream =(1 to 1000).toStreamstream: scala.collection.immutable.Stream[Int] = Stream(1, ?)scala> stream.headres40: Int = 1scala> stream.tailres41: scala.collection.immutable.Stream[Int] = Stream(2, ?)/*惰性求值与range相比,优点就是需要用的时候才会显示出来不需要的时候不会全部列出来,防止溢出*/
3.Tuple(元组)
scala> (1,2) //两个元素称之为pair(对)res42: (Int, Int) = (1,2)scala> 1-> 2res42: (Int, Int) = (1,2)/*也可以定义多个tuple*/scala> val t = (1,"Alice","age","12")t: (Int, String, String, String) = (1,Alice,age,12)scala> t._1res44: Int = 1scala> t._2res45: String = Alicescala> t._3res46: String = agescala> t._4res47: String = 12/*需要返回多个值,可以封装在一个Tuple*/scala> val a = List(1,2,3)a: List[Int] = List(1, 2, 3)scala> def sumSq(in :List[Int]):(Int,Int,Int)= | in.foldLeft((0,0,0))((t,v)=>(t._1 +1,t._2 + v,t._3 + v*v)) /*元素长度,元素求和,元素平方和 */sumSq: (in: List[Int])(Int, Int, Int)scala> sumSq(a)res48: (Int, Int, Int) = (3,6,14)
4.Map(k.v)
k=key v=value
scala> val p = Map(1-> "David",9->"Elwood")p: scala.collection.immutable.Map[Int,String] = Map(1 -> David, 9 -> Elwood)/*p取值valuep(key)*/scala> p(1)res49: String = Davidscala> p(9)res50: String = Elwood/*判断values是否存在*/scala> p.contains(1)res51: Boolean = truescala> p.contains(9)res53: Boolean = truescala> p.contains(2)res54: Boolean = false/*取出key*/scala> p.keysres55: Iterable[Int] = Set(1, 9)/*取出values*/scala> p.valuesres56: Iterable[String] = MapLike(David, Elwood)/*增加一个value用“+”*/scala> p +(8-> "Bon")res57: scala.collection.immutable.Map[Int,String] = Map(1 -> David, 9 -> Elwood, 8 -> Bon)/*减少一个value用“-”*/scala> p-1(p-key)res58: scala.collection.immutable.Map[Int,String] = Map(9 -> Elwood)/*增加多个value用“++”*/scala> p ++ List(2->"Jane",5->"jack")res59: scala.collection.immutable.Map[Int,String] = Map(1 -> David, 9 -> Elwood, 2 -> Jane, 5 -> jack)/*减少多个value用“--”*/scala> p -- List(1,9,2)res60: scala.collection.immutable.Map[Int,String] = Map()/*增加和减少多个value可以同时用“++”“--”*/scala> p ++ List(2->"Jane",5->"jack") --List(9,1)res61: scala.collection.immutable.Map[Int,String] = Map(2 -> Jane, 5 -> jack)
Scala快速排序案例
/*:paste用于编辑一大块的代码 */scala> :paste// Entering paste mode (ctrl-D to finish)def qSort(a:List[Int]):List [Int] =/*输入是一个List,输出是一个排好序Int类型的List */if (a.length < 2) a /*如果List只有一个元素或为空,排序就是本身*/elseqSort(a.filter(_ < a.ahead)) ++ a.filter(_=a.head)++qsort(a.filter(_>a.head))/*先对左半部分进行排序分2区,比a.head小的放a.head的左边*,然后再拼接比a.head大的放右边,++是拼接//*可以看出这是递归的过程*//*验证*/scala> qSort(List(3,1,2))res0: List[Int] = List(1, 2, 3)scala> qSort(List(9,6,4,7,8,2,3,5,7))res1: List[Int] = List(2, 3, 4, 5, 6, 7, 7, 8, 9)
补充阅读材料:
http://docs.scala-lang.org/overviews/collections/introduction.html
阅读全文
0 0
- Scala Immutable Collection(集合)
- SCALA 集合框架文档翻译-Concrete Immutable Collection Classes
- Scala之集合Collection
- Scala 集合(Collection)
- Scala版本冲突--java.lang.NoSuchMethodError:scala.collection.immutable.HashSet$.empty()Lscala/collection/
- SCALA 集合框架文档翻译-Mutable and Immutable Collections
- Scala:集合类型Collection和迭代器
- scala(13)-----集合(Collection)-------列表
- Immutable集合
- Immutable集合
- Spark启动错误Exception in thread “main” java.lang.NoSuchMethodError: scala.collection.immutable.HashSet$
- warning: non-variable type argument Any in type pattern scala.collection.immutable.Set[Any] (the und
- scala(13)-----集合(Collection)-------Set(集合)
- scala -Collection
- scala-collection
- SCALA 集合框架文档翻译-Concrete Mutable Collection Classes
- scala(13)-----集合(Collection)-------Map(映射)
- scala(13)-----集合(Collection)-------元组
- d3.js 关于过渡的变换应用
- Abbreviation Gym
- UVA 10038
- git使用一部分
- Clear! (clear your terminal screen)
- Scala Immutable Collection(集合)
- 单例模式(线程安全)
- forEach无法remove与Iterator的关系
- FormData上传文件显示进度百分比
- oracle的学习历程 2017/8/30
- windows环境下curl报错:Protocol "'http" not supported or disabled in libcurl
- 超链接
- 卷积计算
- c语言数组赋值