快学Scala2-数组

作者: Codlife | 来源:发表于2016-08-07 16:51 被阅读0次

参考书目:《快学scala》第三章

Tips:函数式编程目前正在流行起来,大数据核心技术Spark 就是有Scala 开发

  /*
  * 学习要点:
  * 1.若长度固定则使用Array,否则使用ArrayBuffer
  * 2.提供初始值时不要使用 new
  * 3.用()访问元素
  * 4.for(elem <- arr) 遍历元素
  * 5.for(elem <- arr if....) yiled 将原来的数组转化为新数组
  * Scala 数组可以和Java数组相互转化,用ArrayBuffer,
  * 使用scala.collection.javaConvertions中的函数转化
  * */
  def testArray: Unit ={
    val nums=new Array[Int](10)
    val s=Array("wjf","csm")
    val b=ArrayBuffer[Int]()
    b+=1
    b+=(1,2,3,4)
    b ++= Array(8,13,21)
    // remove the last 3 elements
    // 在数组缓冲的尾端添加或移除元素非常高效
    b.trimEnd(3)
    b.insert(2,3)

    b.toArray

    val a=Array(1,2,3,4)
    // for(...) yiled 创建一个与原始集合类型相同的新集合
    // 守卫:if ,过滤元素
    /*有些有函数式编程经验的程序员喜欢使用filter 和map而不是使用
    * 守卫和 yiled ,这只是一种风格-for循环所做的事是完全相同的*/
    val reuslt=for(elem <- a) yield 2*elem
    var c=for(elem <- a if elem % 2 == 0) yield 2*elem
    c=a.filter(_ % 2 ==0).map(_*2)
    c=a.filter{_ % 2 ==0} map { _ *2}
  }
  /* 具体案例:一个数组,删除 除第一个负数外的所有负数
  * 对比下面两种实现
  * version1 每次遇见负数就删除,删除的过程效率较低
  * 需要数组元素的移动
  * Version2 首先获取需要保留的元素的下标,然后批量删除*/
  var a=new ArrayBuffer[Int](10)
  var first=true
  def version1: Unit ={
    for(i <- 0 until a.length) {
      if(a(i) < 0){
        if(first) first=false
        else a.remove(i)
      }
    }
  }
  def version2: Unit ={
    var indexs=for(i <- 0 until a.length if first | a(i)>0) yield{
      if(a(i) < 0) first=false
      i
    }
    for(i <- 0 until indexs.length)a(i)=a(indexs(i))
    a.trimEnd(a.length - indexs.length)
  }

  def testOFDim: Unit ={
    val matrix=Array.ofDim[Double](2,3)
    matrix(1)(1)=2
    val triangle=new Array[Array[Int]](10)
    for(i <- 0 until triangle.length)
      triangle(i)=new Array[Int](i+1)
  }

相关文章

  • 快学Scala2-数组

    参考书目:《快学scala》第三章 Tips:函数式编程目前正在流行起来,大数据核心技术Spark 就是有Scal...

  • Golang 学习笔记二 数组、切片

    一、数组 《快学 Go 语言》第 4 课 —— 低调的数组Go 语言里面的数组其实很不常用,这是因为数组是定长的静...

  • java与scala数组及集合基本操作对比

    这篇博客介绍了scala的数组 + 可变数组的基本使用,及其与java数组的区别(博客中代码参照 快学scala)...

  • 《快学Scala》——数组、映射和元组

    数组 定长数组:在Scala中可以用Array,初始化一个定长数组。例如: 变长数组(数组缓冲):Scala中使用...

  • 快排,递归,非递归,三向切分,去掉边界条件

    快排 快排的思想: 典型的分治,将数组分成两个子数组,并且分别对子数组排序,且子数组的排序也是分治。 快排和归并排...

  • 数组快排

    有空再补描述。

  • 数据结构概述

    数组 优点:插入快,如果知道下标可以非常快的存取; 缺点:查找慢,删除满,大小固定; 有序数组: 优点:比无序数组...

  • Hashmap的一些问题

    数组和链表是如何组织工作的? 数组:查询快,增删慢链表:查询慢,增删快 概念:数组里的元素是连续的链表的每个元素都...

  • HashMap

    数据结构 HashMap 是一个数组,每个item都是一个链表 设计初衷 数组:查询快,插入慢链表:查询慢,查询快...

  • Python 数组函数

    本文参考:小甲鱼Python基础教学,很好的一门课。可以学一下。 数组添加: 数组删除: 数组查询: 数组排序: ...

网友评论

    本文标题:快学Scala2-数组

    本文链接:https://www.haomeiwen.com/subject/gjylsttx.html