scala基础--->不可变类型操作
来源:互联网 发布:chrome 离线 知乎 编辑:程序博客网 时间:2024/06/06 09:05
运行环境:jdk1.7、scala-2.10.4
package study/** * 数据结构操作:由于不可变类型,所以每次都需要新定义参数接收 */object Constunctor { //使用lazy修修饰,懒加载 lazy val li2 = List(1, 2, 4, 100) def main(args: Array[String]): Unit = { val lis = new List2() val tu = new Tuple2() //元祖 //tu.getElemt //List截取 lis.truncate() //List添加指定位置元素 lis.addtest() //操作map lis.addmap() //reduce\flodRigth\flodLeft操作 lis.reduceOrEqual //添加元素和去重 lis.addElement() //筛选 lis.choice() //遍历list集合 lis.foreachElement() } //元组 class Tuple2() { def getElemt(): Any = { var tup = (12, 'a', "ds", List(21, 23, 11)) println("元祖第一个元素:" + tup._1) var lis = tup._4 for (m <- 0 to lis.length - 1) println("元祖中的集合:" + lis(m)) } } //集合 class List2() { //测试截取元素,前包后不包 def truncate(): Any = { var tra = List(12, 2, 5, 21)//下标以0开始 println("截取元素,前包后不包:" + tra.slice(1, 3)) } //操作::,添加元素到第一个位置 def addtest(): Any = { var li2 = List(1, 2, 4) li2 = 23 :: li2 //添加23到List集合的第一位中 li2 = li2.:+(12) // 添加元素到最后一位中 println("添加元素后的结果::-------->" + li2) //组成一个新的List===List(List(23, 1, 2, 4 ,12), 21) var le = li2 :: 21 :: Nil println("添加List元素后:" + le) } //map操作 def addmap(): Any = { val lis5 = List(1, 22, 3, 4) val mp = lis5.map{ a => { a + 3}}//也是给每个元素加3 val mp2 = lis5.map(_ + 3) //匿名函数给lis5的每个元素加3 println("map操作后的结果:") println("list1:"+mp) println("list2:"+mp2) } //reduce和./()操作 def reduceOrEqual(): Any = { /** * (z /: it)(op) 自左向右在it所指元素的相邻元素间应用二元操作op,初始值为z。 (it :\ z)(op) 自右向左在it所指元素的相邻元素间应用二元操作op,初始值为z。 it.foldLeft(z)(op) 与(z /: it)(op)相同。 it.foldRight(z)(op) 与(it :\ z)(op)相同。 it reduceLeft op 自左向右对非空迭代器it所指元素的相邻元素间应用二元操作op。 it reduceRight op 自右向左对非空迭代器it所指元素的相邻元素间应用二元操作op。 */ //(z /: it)(op)操作 val li4 = List(2, 6, 4) val ss = li4./:(2)({ (m, n) => { println(m + "----->" + n+";") }; n } ) println("集合执行./(pa)后的返回结果:" + ss) //foled操作 val liw = List(2, 5, 4, 1,6) val res = liw.foldLeft(1)((m, n) => { println(m + "------>" + n+";") n }) println("rigth操作") val rigth=liw.foldRight(2)((m,n)=>{ println(m + "------>" + n+";") m }) println("集合执行 it.foldLeft(z)(op)后的返回结果:" + res) println("集合执行 it.foldRight(z)(op)后的返回结果:" + rigth) val redu = List(2, 3, 9,6,7) //reduce操作 println("集合执行_+_后的结果:" + redu.reduce(_ + _)) println("集合执行_-_后的结果:" +redu.reduce(_ - _)) } //添加元素 def addElement(): Any = { val li3 = List(1, 2, 2, 1, 3, 3, 34) val ll = li3.distinct println("去重后的结果") for (y <- ll) print(y + ",") val a1 = li3.+:("23") println("添加元素后的结果" + a1) println("连续相加后的结果:" + li3.reduce(_ + _)) println("连续相减后的结果:" + li3.reduce(_ - _)) } //多条件的筛选 def choice(): Any = { li2.foreach { x => if (x % 2 == 0) if (x % 5 == 0) println("满足条件的值:" + x) } } //遍历 def foreachElement(): Any = { println("第三个元素是:" + li2(2)) println() li2.foreach { x => print("li2的元素是:" + x+";") } } }}
结果:
截取元素,前包后不包:List(2, 5)添加元素后的结果::-------->List(23, 1, 2, 4, 12)添加List元素后:List(List(23, 1, 2, 4, 12), 21)map操作后的结果:list1:List(4, 25, 6, 7)list2:List(4, 25, 6, 7)2----->2;2----->6;6----->4;集合执行./(pa)后的返回结果:41------>2;2------>5;5------>4;4------>1;1------>6;rigth操作6------>2;1------>6;4------>1;5------>4;2------>5;集合执行 it.foldLeft(z)(op)后的返回结果:6集合执行 it.foldRight(z)(op)后的返回结果:2集合执行_+_后的结果:27集合执行_-_后的结果:-23去重后的结果1,2,3,34,添加元素后的结果List(23, 1, 2, 2, 1, 3, 3, 34)连续相加后的结果:46连续相减后的结果:-44满足条件的值:100第三个元素是:4li2的元素是:1;li2的元素是:2;li2的元素是:4;li2的元素是:100;
0 0
- scala基础--->不可变类型操作
- C#类型基础----不可变类型
- Scala 不可变 List
- Scala 不可变 List 方法
- 不可变类型
- python 可变不可变类型
- JAVA String类型不可变
- 可变类型和不可变类型
- python可变类型与不可变类型
- 为什么String类型是不可变的?
- python 可变 与 不可变类型
- String类型是不可变的
- python中的可变与不可变类型
- 使用volatile类型发布不可变对象
- String类型值不可变的原因
- String 类型不可变 如何理解?
- 不可变类(java基础)
- iOS基础-可变和不可变容器
- python核心编程学习笔记-2016-08-13-04-描述符
- 236. Lowest Common Ancestor of a Binary Tree
- 【hdu】5354 Bipartite Graph【cdq分治+并查集】
- POJ 3321 Apple Tree(DFS + 树状数组)
- hdu1166 敌兵布阵 线段树
- scala基础--->不可变类型操作
- 递归思想
- 五种方式输出二维数组
- tjut 2894
- php 正则判断是否为数字
- Android自动清理 无用 多余 未引用 未关联资源工具
- cf#367E-Working routine 十字链表
- linux下动态库和静态库的制作、寻找、比较及相关Makefile的编写
- ThinkPhp的介绍与模型的使用