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. Flume基础学习

    Flume是一款非常优秀的日志采集工具.支持多种形式的日志采集,作为apache的顶级开源项目,Flume再大数据方面具有广泛的应用 首先需要在Flume的解压目录中conf文件夹中将flume-en ...

  2. matplotlib动态图subplots()和subplot()不同及参数

    一.fig,ax = subplots(nrows,ncols,sharex,sharey,squeeze,subplot_kw,gridspec_kw,**fig_kw)  创建画布和子图 nrow ...

  3. Django跨域:

    下包 pip install django-cors-headers 下面的操作在setting里 添加到appps里 INSTALLED_APPS = [ ... 'corsheaders', .. ...

  4. C#串口通信:MSComm控件使用详解

    目  次MSComm控件两种处理通讯的方式CommPort属性RThreshold 属性CTSHolding 属性SThreshold 属性CDHolding 属性DSRHolding 属性Setti ...

  5. 学习笔记(22)- plato-训练端到端的模型

    原始文档 Train an end-to-end model To get started we can train a very simple model using Ludwig (feel fr ...

  6. 【C语言】输入一个正整数,判断其是否为素数

    素数的定义: 素数(prime number)又称质数,有无限个. 素数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为素数.代码1: #include<stdio.h& ...

  7. C语言:将字符串中的字符逆序输出,但不改变字符串中的内容。-在main函数中将多次调用fun函数,每调用一次,输出链表尾部结点中的数据,并释放该结点,使链表缩短。

    //将字符串中的字符逆序输出,但不改变字符串中的内容. #include <stdio.h> /************found************/ void fun (char ...

  8. C++基础之字符串string

    C++基础之字符串string 标准库类型string表示可变长的字符序列,使用string类型必须首先包含string头文件.作为标准裤的一部分,string定义在命名空间std中. 定义和初始化s ...

  9. CodeBlocks17.12配置GNU GCC + 汉化

    Codeblocks17.12以及Gcc和汉化包链接: 链接:https://pan.baidu.com/s/1F23fjvi8xRpQ9xR14ILpEA 提取码:90d6 一.TDM-GCC 的安 ...

  10. 移动端,ajax 动态加载的元素,为动态添加的一系列同个类名的元素添加点击事件

    背景:一个列表页,有一系列同类名的元素,需要为每一个动态添加的列表项添加事件: 点击选择下图中不同的文档类型,再通过 ajax 动态加载不同的文档. 使用过的方法: 1.通知 jquery 的 $(s ...