scala学习---2
一.遍历
object Scala05 { def main(args: Array[String]): Unit = { //1.遍历 /* var n=10 while (n>0){ println(n) n-=1 }*/ //2./* var n=10 for(i<-1 to n) println(i)*/ //3./* var n=10 for (i<-1 until n) println(i)*/ //4.字符串遍历 /*for(c<-"Hello World") print(c)*/ //1.跳出循环 //·scala没有提供类似于java的break语句。 //·但是可以使用boolean类型变量、return或者Breaks的break函数来替代使用。 /* import scala.util.control.Breaks._ breakable { var n = 10 for(c <- "Hello World") { if(n == 5) break; print(c) n -= 1 } }*/ //2.多重for循环:九九乘法表 /* for(i <- 1 to 9; j <- 1 to 9) { if(j == 9) { println(i * j) } else { print(i * j + " ") } }*/ //3.if守卫:取偶数 // for(i <- 1 to 100 if i % 2 == 0) println(i) //4.for推导式:构造集合 println( for(i <- 1 to 10) yield i) //打印结果 Vector(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) }}
1.Any是String和Int的公共父类型
2.在Scala中,定义函数时,如果函数体直接包裹在了花括号里面,而没有使用=连接,则函数的返回值类型就是Unit。这样的函数就被称之为过程。过程通常用于不需要返回值的函数。
二.方法函数
object Scala01 {//1.函数def sayHello(name: String, age: Int) = {if (age > 18) {printf("hi %s, you are a big boy\n", name); age}else {printf("hi %s, you are a little boy\n", name);age}}def main(args: Array[String]): Unit = {//sayHello("leo", 30)//println(sum(10))//sayHello1("")// println(sum3(1,2,4))println(sum2(1,2,4))}//2.函数def sum(n: Int) = {var sum = 0;for(i <- 1 to n) sum += isum //默认是返回值 }//3.默认参数 如果给出的参数不够,则会从作往右依次应用参数def sayHello1(name: String, age: Int = 20) {print("Hello, " + name + ", your age is " + age)}//4还可以混合使用未命名参数和带名参数,但是未命名参数必须排在带名参数前面//sayHello("Mick", lastName = "Nina", middleName = "Jack")//5.变长参数def sum3(nums:Int*)={var res=0for (num<-nums) res+=numres}//6.使用递归函数实现累加def sum2(nums:Int*):Int={if(nums.length==0)0else nums.head+sum2(nums.tail:_*)} }
三.集合
ArrayBuffer和Array
// 使用insert()函数可以在指定位置插入元素 // 但是这种操作效率很低,因为需要移动指定位置后的所有元素 b.insert(5, 6) b.insert(6, 7, 8, 9, 10) // 使用remove()函数可以移除指定位置的元素 b.remove(1) b.remove(1, 3) // Array与ArrayBuffer可以互相进行转换 b.toArray a.toBuffer// 使用for循环和until遍历Array / ArrayBuffer // 使until是RichInt提供的函数for (i <- 0 until b.length)println(b(i)) // 跳跃遍历Array / ArrayBufferfor(i <- 0 until (b.length, 2))println(b(i)) // 从尾部遍历Array / ArrayBufferfor(i <- (0 until b.length).reverse)println(b(i)) // 使用“增强for循环”遍历Array / ArrayBufferfor (e <- b)println(e)// 数组元素求和val a = Array(1, 2, 3, 4, 5)val sum = a.sum // 获取数组最大值val max = a.max // 对数组进行排序 scala.util.Sorting.quickSort(a) // 获取数组中所有元素内容 a.mkStringa.mkString(", ")a.mkString("<", ",", ">") // toString函数 a.toStringb.toString
使用yield和函数式编程转换数组// 对Array进行转换,获取的还是Array val a = Array(1, 2, 3, 4, 5) val a2 = for (ele <- a) yield ele * ele // 对ArrayBuffer进行转换,获取的还是ArrayBuffer val b = ArrayBuffer[Int]() b += (1, 2, 3, 4, 5) val b2 = for (ele <- b) yield ele * ele // 结合if守卫,仅转换需要的元素 val a3 = for (ele <- a if ele % 2 == 0) yield ele * ele// 使用函数式编程转换数组(通常使用第一种方式) a.filter(_ % 2 == 0).map(2 * _) a.filter { _ % 2 == 0 } map { 2 * _ }算法案例:移除第一个负数之后的所有负数// 构建数组 val a = ArrayBuffer[Int]() a += (1, 2, 3, 4, 5, -1, -3, -5, -9)// 每发现一个第一个负数之后的负数,就进行移除,性能较差,多次移动数组 var foundFirstNegative = false var arrayLength = a.length var index = 0 while (index < arrayLength) {if (a(index) >= 0) {index += 1} else {if (!foundFirstNegative) { foundFirstNegative = true; index += 1 }else { a.remove(index); arrayLength -= 1 }} } 算法案例:移除第一个负数之后的所有负数(简约版) // 重新构建数组 val a = ArrayBuffer[Int]() a += (1, 2, 3, 4, 5, -1, -3, -5, -9)// 每记录所有不需要移除的元素的索引,稍后一次性移除所有需要移除的元素 // 性能较高,数组内的元素迁移只要执行一次即可 var foundFirstNegative = false val keepIndexes = for (i <- 0 until a.length if !foundFirstNegative || a(i) >= 0) yield {if (a(i) < 0) foundFirstNegative = truei } for (i <- 0 until keepIndexes.length) { a(i) = a(keepIndexes(i)) } a.trimEnd(a.length - keepIndexes.length)
转载于:https://www.cnblogs.com/kaiwen03/p/9547824.html
scala学习---2相关推荐
- 机器学习(三)--- scala学习笔记
Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...
- Scala学习第五天数组
2019独角兽企业重金招聘Python工程师标准>>> package com.learn.scalaimport scala.collection.mutable.ArrayBuf ...
- Scala 学习笔记
Scala 学习笔记 1 object func_exp { 2 println("Welcome to the Scala worksheet") //> Welcome ...
- Scala学习笔记-环境搭建以及简单语法
关于环境的搭建,去官网下载JDK8和Scala的IDE就可以了,Scala的IDE是基于Eclipse的. 下面直接上代码: 这是项目目录: A是scala写的: package first impo ...
- Scala学习笔记04:内建控制结构
Scala学习笔记04:内建控制结构 scala提供的控制结构并不算多,因为在函数式编程中,可以自己开发出各种功能的控制结构,所以scala提供的原生控制结构仅仅够用为止. 1.if - 判断 if是 ...
- Scala学习笔记03:操作符
Scala学习笔记03:操作符 一.scala中操作符与方法的等价性 scala中操作符即方法.方法即操作符.scala中操作符其实是普通方法调用的另一种表现形式,运算符的使用其实就是隐含地调用对应的 ...
- Scala学习笔记02:数据类型、常量与变量
Scala学习笔记02:数据类型.常量与变量 一.数据类型 1.基本数据类型 Byte 字节型 Short 短整型 Int 整型 Long 长整型 Char 字符型 String 字符串 Float ...
- scala学习-scala读取Hbase表中数据并且做join连接查询
1.业务需求:sparkSQL on hbase ,sparkSQL直接读取Hbase中的两个表,进行连接查询. 2.图示 绿色的线 上图中绿色的线是做过测试的,直接在hive中建表,然后load数据 ...
- Scala学习--《Scala编程》
2019独角兽企业重金招聘Python工程师标准>>> Scala学习手册--可伸缩的语言(随着使用者的需求而成长) 第一章:基本概念 Scala=FP+OO.静态语言 兼容性.简 ...
- Scala学习笔记总结
Scala学习网站:https://www.runoob.com/scala/scala-intro.html scala总结: Scala编程语言学习总结_hjy1821的博客-CSDN博客_sca ...
最新文章
- 排序算法---希尔排序(java版)
- JdbcTemplate中queryForObject方法返回空结果或不正确结果数量的解决方法
- Ubuntu系统 VI 编辑器初试
- python自带gui_Python GUI开发工具中五种类型的相关介绍
- linux git 删除分支,git 删除分支和回滚的实例详解
- 如何扩展Laravel Auth来满足项目需求
- MyBatis源码解读之源码结构
- python的浮点数占字节_Python二进制文件读取并转换为浮点数详解
- 转载 VC轻松解析XML文件 - CMarkup类的使用方法
- 人机交互技术:利用声波识别手势 Gesture Control System Uses Sound Alone
- toolchain安装教程支持_Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法...
- 如何使用火焰图对Spark的executor的CPU使用率进行profile?具体步骤,如何操作?
- 大道至简之九:周期的实质与投资机会
- 几分钟计算机不操作就注销,win10系统长时间不操作就自动注销的方案
- 怎么搭建在线网校系统,靠谱的网校平台搭建开发公司
- Linux文件打补丁
- Spring 体系版本对应关系
- 面试 cocos2dx
- 【Python】Matplotlib 可视化进阶之PCA主成分分布图
- 一篇文章看明白 Android 图形系统 Surface 与 SurfaceFlinger 之间的关系
热门文章
- Gnuplot的安装和基本使用方法
- labview创建.netdll设置多个输出_手把手以实例教你学LabVIEW编程,条件结构编程方法...
- redis 队列_Redis系列5实现简单消息队列
- 软考备战系列一----软件测试基础
- mysql查看是否开启定时器_Mysql 查看定时器 打开定时器 设置定时器时间
- java 自定义注解 生成json_SpringBoot:自定义注解实现后台接收Json参数
- java 手机声音提醒功能_java – 同时播放声音Android
- oracle ctl文件7c1b,批量生成控制文件,用sqlldr自动导入多个表的数据
- mysql 范围优化_如何优化mysql的范围查询
- spring boot框架_redislimiter-spring-boot分布式限流框架