一.遍历

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相关推荐

  1. 机器学习(三)--- scala学习笔记

    Scala是一门多范式的编程语言,一种类似Java的编程语言,设计初衷是实现可伸缩的语言.并集成面向对象编程和函数式编程的各种特性. Spark是UC Berkeley AMP lab所开源的类Had ...

  2. Scala学习第五天数组

    2019独角兽企业重金招聘Python工程师标准>>> package com.learn.scalaimport scala.collection.mutable.ArrayBuf ...

  3. Scala 学习笔记

    Scala 学习笔记 1 object func_exp { 2 println("Welcome to the Scala worksheet") //> Welcome ...

  4. Scala学习笔记-环境搭建以及简单语法

    关于环境的搭建,去官网下载JDK8和Scala的IDE就可以了,Scala的IDE是基于Eclipse的. 下面直接上代码: 这是项目目录: A是scala写的: package first impo ...

  5. Scala学习笔记04:内建控制结构

    Scala学习笔记04:内建控制结构 scala提供的控制结构并不算多,因为在函数式编程中,可以自己开发出各种功能的控制结构,所以scala提供的原生控制结构仅仅够用为止. 1.if - 判断 if是 ...

  6. Scala学习笔记03:操作符

    Scala学习笔记03:操作符 一.scala中操作符与方法的等价性 scala中操作符即方法.方法即操作符.scala中操作符其实是普通方法调用的另一种表现形式,运算符的使用其实就是隐含地调用对应的 ...

  7. Scala学习笔记02:数据类型、常量与变量

    Scala学习笔记02:数据类型.常量与变量 一.数据类型 1.基本数据类型 Byte 字节型 Short 短整型 Int 整型 Long 长整型 Char 字符型 String 字符串 Float ...

  8. scala学习-scala读取Hbase表中数据并且做join连接查询

    1.业务需求:sparkSQL on hbase ,sparkSQL直接读取Hbase中的两个表,进行连接查询. 2.图示 绿色的线 上图中绿色的线是做过测试的,直接在hive中建表,然后load数据 ...

  9. Scala学习--《Scala编程》

    2019独角兽企业重金招聘Python工程师标准>>> Scala学习手册--可伸缩的语言(随着使用者的需求而成长)  第一章:基本概念 Scala=FP+OO.静态语言 兼容性.简 ...

  10. Scala学习笔记总结

    Scala学习网站:https://www.runoob.com/scala/scala-intro.html scala总结: Scala编程语言学习总结_hjy1821的博客-CSDN博客_sca ...

最新文章

  1. 排序算法---希尔排序(java版)
  2. JdbcTemplate中queryForObject方法返回空结果或不正确结果数量的解决方法
  3. Ubuntu系统 VI 编辑器初试
  4. python自带gui_Python GUI开发工具中五种类型的相关介绍
  5. linux git 删除分支,git 删除分支和回滚的实例详解
  6. 如何扩展Laravel Auth来满足项目需求
  7. MyBatis源码解读之源码结构
  8. python的浮点数占字节_Python二进制文件读取并转换为浮点数详解
  9. 转载 VC轻松解析XML文件 - CMarkup类的使用方法
  10. 人机交互技术:利用声波识别手势 Gesture Control System Uses Sound Alone
  11. toolchain安装教程支持_Ubuntu安装ARM架构GCC工具链(ubuntu install ARM toolchain)最简单办法...
  12. 如何使用火焰图对Spark的executor的CPU使用率进行profile?具体步骤,如何操作?
  13. 大道至简之九:周期的实质与投资机会
  14. 几分钟计算机不操作就注销,win10系统长时间不操作就自动注销的方案
  15. 怎么搭建在线网校系统,靠谱的网校平台搭建开发公司
  16. Linux文件打补丁
  17. Spring 体系版本对应关系
  18. 面试 cocos2dx
  19. 【Python】Matplotlib 可视化进阶之PCA主成分分布图
  20. 一篇文章看明白 Android 图形系统 Surface 与 SurfaceFlinger 之间的关系

热门文章

  1. Gnuplot的安装和基本使用方法
  2. labview创建.netdll设置多个输出_手把手以实例教你学LabVIEW编程,条件结构编程方法...
  3. redis 队列_Redis系列5实现简单消息队列
  4. 软考备战系列一----软件测试基础
  5. mysql查看是否开启定时器_Mysql 查看定时器 打开定时器 设置定时器时间
  6. java 自定义注解 生成json_SpringBoot:自定义注解实现后台接收Json参数
  7. java 手机声音提醒功能_java – 同时播放声音Android
  8. oracle ctl文件7c1b,批量生成控制文件,用sqlldr自动导入多个表的数据
  9. mysql 范围优化_如何优化mysql的范围查询
  10. spring boot框架_redislimiter-spring-boot分布式限流框架