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. label 阻止冒泡 防止点击label 触发2次事件

    // 必须要把 jnput的外面的label加上事件阻止冒泡,否则点击label的时候,会冒泡到input上 再次触发input的点击事件 $('.xt_order_cleft_modb_rl_dx' ...

  2. 「JSOI2015」isomorphism

    「JSOI2015」isomorphism 传送门 我们还是考虑树哈希来判同构. 但是我们需要使用一些特殊的手段来特殊对待假节点. 由于是无向树,我们首先求出重心,然后以重心为根跑树哈希. 此处我们不 ...

  3. MongoDB - 将查询结果保存到excel文件中

    import pymongo import re client = pymongo.MongoClient('127.0.0.1', 27017) db_name = 'Trade' db = cli ...

  4. Win10安装.Net Framework4.7及更高版本

    问题描述 使用VS打开项目工程时,提示未安装.net framework4.7,但在启用或关闭windows功能里已经勾选了.net framework 4.7的全部功能. 直接从网上下载.net f ...

  5. opencv:图像查找表 与 颜色表

    LUT 使用 颜色查找表 example LUT applyColorMap // 读入制作好的lut.png Mat color = imread("D:/images/lut.png&q ...

  6. PHP中PHP $_POST和PHP $_REQUEST及PHP $_GET的用法及区别

     笔者最近开始学习PHP语言大法,记录一下学习过程中遇到的知识点.          今天介绍的是php中有关 php $_post 和 php $_request 及 php $_get 的用法及区 ...

  7. CLI配置WLAN-PSK认证和802.1X认证

    一.该部分配置主要是针对PSK认证 1.创建WLAN 2 2.让WLAN使用PSK的方式 config wlan create 2 OK OK  //创建WLAN Profile Name和SSID ...

  8. P1579

    AC: #include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for(int i = a; i < b ...

  9. Eclipse Tomcat 7.0 添加WEB项目报错:Tomcat version 7.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 and 6 Web modules

    前言 我叫梅乾花,我误闯了“从零开始的程序世界”,遭受到了前所未有的的困难,为了活下去,为了看见美好的明天,我开始学习之旅. 问题篇我打开了"Eclipse",将项目导入其中,开启 ...

  10. C:gcc的基本使用

    分布编译 预处理:gcc -E hello.c -o hello.i 编 译:gcc -S hello.i -o hello.s 汇 编:gcc -c hello.s -o hello.o 链 接:g ...