1. 定义数组时,没有new和有new是有区别的:

scala> val arr3 = Array[Int](2)    此时,arr3中仅包含1个元素2
arr3: Array[Int] = Array(2)

scala> val arr6 =new Array[Int](2)    如果new,相当于调用了数组的apply方法,直接为数组赋值
arr6: Array[Int] = Array(0, 0)     此时,指定该数组类型为Int,则arr6中包含2个元素0,0

scala> arr7
res519: Array[Nothing] = Array(null, null, null)     此时,未指定数组类型,则其包含3个元素,均为null

2. 数组转换:

scala> val f1=(x:Int) => x%2==0        f1: Int => Boolean = <function1>

scala> arr8.filter(f1)                                               res96: Array[Int] = Array(2, 4, 6, 8)

scala> arr8.filter((x:Int) => x%2==0)                                res97: Array[Int] = Array(2, 4, 6, 8)

scala> arr8.filter(x => x%2==0)                                      res99: Array[Int] = Array(2, 4, 6, 8)

scala> arr8.filter(_ %2==0)                                          res100: Array[Int] = Array(2, 4, 6, 8)

scala> val f2=(x:Int) => x*10                                        f2: Int => Int = <function1>

scala> arr8.filter(_ %2==0).map(f2)                                  res104: Array[Int] = Array(2, 4, 6, 8)

scala> arr8.filter(_ %2==0).map(_ * 10)                              res106: Array[Int] = Array(20, 40, 60, 80)

======================================================

5.    数组、映射、元组、集合

5.1.   数组

5.1.1.    定长数组和变长数组

(1)定长数组定义格式:

val arr=new Array[T](数组长度)

val arr=Array(1,2,3,4,5)

(2)变长数组定义格式:

valarr = ArrayBuffer[T]()

注意需要导包:import scala.collection.mutable.ArrayBuffer

package cn.itcast.scala
import scala.collection.mutable.ArrayBuffer
object ArrayDemo {
  def main(args: Array[String]) {     //初始化一个长度为8的定长数组,其所有元素均为0
   
val arr1 = new Array[Int](8)
    //直接打印定长数组,内容为数组的hashcode值
   
println(arr1)
    //将数组转换成数组缓冲,就可以看到原数组中的内容了
    //toBuffer会将数组转换长数组缓冲
   
println(arr1.toBuffer)     //注意:如果new,相当于调用了数组的apply方法,直接为数组赋值
    //初始化一个长度为1的定长数组
   
val arr2 = Array[Int](10)
    println(arr2.toBuffer)     //定义一个长度为3的定长数组
   
val arr3 = Array("hadoop", "storm", "spark")
    //使用()来访问元素
   
println(arr3(2))

    //
变长数组(数组缓冲)
    //如果想使用数组缓冲,需要导入import scala.collection.mutable.ArrayBuffer包
   
val ab = ArrayBuffer[Int]()
    //向数组缓冲的尾部追加一个元素
    //+=尾部追加元素
   
ab += 1
    //追加多个元素
   
ab += (2, 3, 4, 5)
    //追加一个数组++=
   
ab ++= Array(6, 7)
    //追加一个数组缓冲
   
ab ++= ArrayBuffer(8,9)
    //打印数组缓冲ab     //在数组某个位置插入元素用insert,从某下标插入
   
ab.insert(0, -1, 0)
    //删除数组某个位置的元素用remove  按照下标删除
   
ab.remove(0)
ab -=3
ab --=Array(1,2)
    println(ab)   }
}
 

5.1.2.    遍历数组

1.增强for循环

2.好用的until会生成脚标,0 until 10 包含0不包含10

package cn.itcast.scala
object ForArrayDemo {
  def main(args: Array[String]) {
    //初始化一个数组
   
val arr = Array(1,2,3,4,5,6,7,8)
    //增强for循环
   
for(i <- arr)
      println(i)     //好用的until会生成一个Range
    //reverse是将前面生成的Range反转
   
for(i <- (0 until arr.length).reverse)
      println(arr(i))
  }
}
 

 

5.1.3.    数组转换

yield关键字将原始的数组进行转换会产生一个新的数组,原始的数组不变

package cn.itcast.scala

object ArrayYieldDemo {
  def main(args: Array[String]) {
    //定义一个数组
   
val arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
    //将偶数取出乘以10后再生成一个新的数组
   
val res = for (e <- arr if e % 2 == 0) yield e * 10
    println(res.toBuffer)     //更高级的写法,用着更爽
    //filter是过滤,接收一个返回值为boolean的函数
    //map相当于将数组中的每一个元素取出来,应用传进去的函数
   
val r = arr.filter(_ % 2 == 0).map(_ * 10)
    println(r.toBuffer)

  }
}
 

5.1.4.    数组常用算法

在Scala中,数组上的某些方法对数组进行相应的操作非常方便!

第1节 Scala基础语法:9、10、数组的更多相关文章

  1. 第1节 Scala基础语法:5、6、7、8、基础-申明变量和常用类型,表达式,循环,定义方法和函数

    4.    Scala基础 4.1.   声明变量 package cn.itcast.scala object VariableDemo {   def main(args: Array[Strin ...

  2. 第1节 Scala基础语法:scala中的方法源码分析

    val list=List(1,2,3,4) list.reduce((x:Int,y:Int)=>x+y)--->list.reduceLeft((x:Int,y:Int)=>x+ ...

  3. 第1节 Scala基础语法:13、list集合的定义和操作;16、set集合;17、map集合

    list.+:5 , list.::5: 在list集合头部添加单个元素5 : li1.:+(5):在list集合尾部添加单个元素5: li1++li2,li1:::li2:在li1集合尾部添加il2 ...

  4. 第1节 Scala基础语法:14、15、list集合练习

    package cn.itcast.collect /** *作业题 */object ListTest { def main(args: Array[String]): Unit = { //创建一 ...

  5. 第1节 Scala基础语法:11、映射;12、元组

    5.2.   映射 在Scala中,把哈希表这种数据结构叫做映射. 1.1.1.    构建映射 (1)构建映射格式 1.val map=Map(键 -> 值,键 -> 值....) 2. ...

  6. 第1节 Scala基础语法:3、环境;4、插件

    1.    Scala编译器安装 1.1.   安装JDK 因为Scala是运行在JVM平台上的,所以安装Scala之前要安装JDK. 1.2.   安装Scala 1.2.1.    Windows ...

  7. 第1节 Scala基础语法:1、2、概述,什么是scala

    Scala编程 1.    课程目标 1.1.  目标1:熟练使用scala编写Spark程序 1.2.  目标2:动手编写一个简易版的Spark通信框架 1.3.  目标3:为阅读Spark内核源码 ...

  8. 【Scala学习之一】 Scala基础语法

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...

  9. 1.scala基础语法总结

    Scala基础语法总结:Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的.如果一行里写多个语句那么分号是需要的 val s = "菜鸟教程"; pr ...

随机推荐

  1. Linux控制服务和守护进程

    目录 控制服务和守护进程 1.systemd 1.1.systemd简介 1.2.systemd的新特性 1.3.systemd的核心概念Unit 2.使用systemctl管理服务 控制服务和守护进 ...

  2. acwing练习

    220. 最大公约数 给定整数N,求1<=x,y<=N且GCD(x,y)为素数的数对(x,y)有多少对. GCD(x,y)即求x,y的最大公约数. 输入格式 输入一个整数N 输出格式 输出 ...

  3. plupload上传视频插件jQuery+php

    我在网上找到一个很好的视频上传插件,经过我的一些整理.补充,在这里分享给大家. 这个视频插件是新浪微博plupload上传视频插件,支持格式有mpg,m4v,mp4,flv,3gp,mov,avi,r ...

  4. dp(出国简历)

    Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了.要申请国外的任何大学,你都要交纳一定的申请费用,这可是很惊人的.Speakless没有 ...

  5. Java数组和方法

    1. 数组可以作为方法的参数 package cn.itcast.day05.demo04; /* 数组可以作为方法的参数. 当调用方法的时候,向方法的小括号进行传参,传递进去的其实是数组的地址值. ...

  6. 传奇衣服、翅膀、武器、怪物、NPC等外观代码计算方法与公式

    详细介绍humX.wil  weaponX.wil itemsX.wil dnitemsX.wil stateitemX.wil monX.wil代码计算方法   以下计算方法适用于HERO引擎和3K ...

  7. LeetCode练题——58. Length of Last Word

    1.题目 58. Length of Last Word——Easy Given a string s consists of upper/lower-case alphabets and empty ...

  8. css 属性值 calc (目前只了解部分)

    移动端页面,有如下图的需求: 实现效果: 实现 css 代码: .list {/*父级*/ border: 1px solid #E9EAEA; border-radius: 2px; backgro ...

  9. 深入剖析Windows专业版安装Docker引擎和Windows家庭版Docker引擎安装的区别

    原创声明:作者:Arnold.zhao  博客园地址:https://www.cnblogs.com/zh94 公司使用的电脑是Windows专业版,所以配置本机的Docker时会方便许多,后续由于需 ...

  10. DAY1小题

    F 求逆序对的板子题 #include<cstdio> #define ll long long using namespace std; ; ll a[maxn],r[maxn],n; ...