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. django 项目发布(centos 6.5 + python 3.5 + django1.9.8 + paramiko 2.0.2 + gunicorn )

    环境 os centos 6.5 64bit python 3.5 django 1.9.8 paramiko 2.0.2 gunicorn 19.6.0 安装 centos install pyth ...

  2. HGAME 2020 week1 web

    1.Cosmos 的博客 知识点:git source code leak 2.接 头 霸 王 Description HGAME Re:Dive 开服啦~ 打开题目,提示了"头" ...

  3. 攻防世界 simple——js

    simple_js [原理] javascript的代码审计 [目地] 掌握简单的javascript函数 [环境] windows [工具] firefox [步骤] 1.打开页面,查看源代码,可以 ...

  4. 1、json背景

    教程链接 链接:http://pan.baidu.com/s/1mil4M1M 密码:vwsn JSON (JavaScript对象表示法)是一种轻量级的基于文本的开放标准,被设计用于可读的数据交换, ...

  5. 20-02-27 hive表的几个问题

    1.hive表的动态分区 2.hive  表如何修改列名 3.group  by  对统计指标的影响  (group by 的本质) 4.row_number 对数据的影响

  6. python manage.py shell

    启动python有两种方式:python manage.py shell和python. 这两个命令 都会启动交互解释器,但是manage.py shell命令有一个重要的不同: 在启动解释器之前,它 ...

  7. AFNetworking errorCode -1016 解决方法

    AFNetworking 默认是只能解析以下格式,如果需要支持data等格式,需要增加acceptableContentTypes AFNetworking.acceptableContentType ...

  8. C语言:利用指针解决:统计一个长度为2的字符串在另外一个字符串中出现的次数。

    //统计一个长度为2的字符串在另外一个字符串中出现的次数. #include <conio.h> #include <stdio.h> #include <string. ...

  9. 《JavaScript高级程序设计》读书笔记(三)基本概念第二小节 Number类型

    内容---语法 上一小节---数据类型 本小节 number类型---流程控制语句---理解函数 number类型--使用IEEE754格式来表示整数和浮点数值(双精度数值)--规定了数值字面量格式, ...

  10. Python基础(一) Python3环境搭建

    转载清注明原文地址,谢谢. OS:Windows 10 第一步,从Python官方下载安装包 Windows端下载地址:https://www.python.org/downloads/windows ...