数组

-----------------------------------

  0.若长度固定则用Array,若长度可能变化则使用ArrayBuffer

  1.提供初始值的时候不要使用new。

  2.用()来访问元素

  3.使用for(elem<-arr)来遍历元素

  4.用for(elem<- arr if ....)...yield...来将原数组转换成新数组

  5.Scala数组和java数组可以互操作;用ArrayBuffer,使用scala.collection.JavaConversions中的转换函数。

  1.定长数组

    (1)如果需要一个长度不变的一个数组,可以用Array

      val nums = new Array[Int](10)  //10个整数的数组,将所有元素初始化为0

      val a = new Array[String](10)  //10个字符串数组,所有元素初始化都为null

      val s = Array("Hello","World")  //长度为2的Array[String]----类型是推断出来的

                    //说明:已经提供初始值就不需要new

      s(0) = "Goodbye"      //Array("Goodbye","World"),使用()而不是[]来访问元素

  2.边长数组:数组缓冲。对于长度按照需要变化的数组,java有ArrayList。Scala中有ArrayBuffer

    

import scala.collection.mutable.ArrayBuffer
val b = ArrayBuffer[Int]() //或者new ArrayBuffer[Int],一个空的数组缓冲,用于存放整数
b+= //ArrayBuufer(1),用+=在尾端添加元素
b+=(,,,) //ArrayBuffer(1,1,2,3,5),在尾端添加多个元素,用括号括起来
b++=Array(,,) //ArrayBuffer(1,1,2,3,5,8,13,21),可以用++=操作符追加任何集合
b.timeEnd() //ArrayBuffer(1,1,2),移除后面5个元素

  在数组尾部添加或者溢出元素是比较高效的操作,也可以在任意位置插入或者移除元素,但是这样就没有那么高效了,所有在那个之后的元素都必须被平移。如:

b.insert(,)    //ArrayBuffer(1,1,6,2),这是在下标2之前进行插入6操作
b.insert(,,,) //ArrayBuffer(1,1,7,8,9,6,2),可以插入任意多的元素
b.remove() //Array(1,1,8,9,6,2),移除下标为2上的元素
b.remove(,) //ArrayBuffer(1,1,2),第二个参数是要移除多少个元素

有的时候需要构建一个Array,但是不知道最终需要装进去多少个元素。在这种情况下先构建一个缓冲数组,然后调用:b.toArray

3.遍历数组和数组缓冲

for(i<- until a.length)
println(i+":"+a(i)) //这个地方变量i的取值范围是从0到a.length-1.until是RichInt类的方法,返回所有小于(但是不包括)上限的数组
  如 0 until 10 //Range(0,1,2,3,4,5,6,7,8,9)

  如果想要每两个元素一条,可以让i这样进行遍历

  

//如果想要每两个元素一跳,可以这样遍历
until (a.length,) //Range(0,2,4...)
//如果要从数组尾端开始,遍历方法如下:
( until a.length).reverse //Range(...,2,1,0)
//如果在循环体中不需要用到数组下标,可以直接这样访问数组
for(elem <- a)
println(elem)

//定长数组的操作

var arr= new Array[Int]();    //创建一个定长数组,元素都为0
arr = Array(,,) //将arr中的0,1,2号位置上的0,0,0换成1,2,3
arr() //取出第一个位置上的元素

//边长数组操作

import scala.collection.mutable.ArrayBuffer    //先进行导包操作
var buf = ArrayBuffer[Int]() //创建数组缓冲区对象

//溢出末尾两个元素

buf.trimEnd()    //移除末尾两个元素
buf.trimStart() //移除开始两个元素

//yield  产生新值

val a = Array(,,,,)
val result = for(elem<- a) yield * elem //产生result是(4,6,10,14,22)

//守卫条件

//  返回大于5的偶数,类型为Vector
val items = for(i <- to if i % == if i > ) yield i;

5.常用的算法

Array(,,,).sum    //19    对ArrayBuffer同样适用,使用sum方法,元素类型必须是数值类型:要么是整数,要么是浮点型或者BigInteger/BigDecimal
ArrayBuffer("Mary","had","a","little","lamb").max    //返回little,max和min输出数组或者数组缓冲区中最大或者最小的元素

//sorted()方法

val b = ArrayBuffer(,,,)
val bSorted = b.sourted(_<_) //ArrayBuffer(1,7,2,9) val bsorted=b.sorted(_>_) //ArrayBuffer(9,7,2,1)

//可以直接对一个数组进行排序,但是不能对缓冲区进行排序

val a =Array(1,7,2,9)
scala.util.Sorting.quickSort(a) // Array(1,2,7,9)
//如果想要显示数组或者缓冲区的内容,可以使用mkString方法,允许在指定的元素之间的分隔符
a.mkString("and" ) //"1 and 2 and 7 and 9"
a.mkString("<",",",">") //"<1,2,7,9>" //相对于toString相比:
a.toString //这是java的方法,毫无意义
b.toString //"ArrayBuffer(1,7,2,9)"

  7.多维数组

  和java一样,多维数组是通过数组的数组来实现的。如Double的二维数组类型为Array[Array[Double]],构造这样的一个数组可以用ofDim方法:  var matrix=Array.ofDim[Double]{3,4}  //定义一个3行4列的二维数组

  要访问其中的元素,使用两对圆括号:matrix(row)(column)=42

  8.与java的互操作,导入转换类,使用的是隐式转换,

  scala>import scala.collection.javaConversions.bufferAsJavaList

  而要访问其中的元素,每一行的长度不相同

最新文章

  1. codeforces754D Fedor and coupons
  2. Android onActivityResult没响应
  3. 关于html中的设置body宽高的理解
  4. 为什么不推崇复杂的ORM
  5. hdu--(1247)Hat’s Words(trie树)
  6. HDU 1856 More is better(并查集)
  7. implicitly_wait()隐式等待
  8. JavaScript DOM-Ready 机制
  9. mac 环境下使用virtual box 虚拟机(win7)与主机之间互相ping通
  10. Beginning Python From Novice to Professional (5) - 条件与循环
  11. Repository 仓储
  12. Unity3D中的shader基础知识
  13. Python 堡垒机介绍
  14. python 写入CSV出现空白行问题及拓展
  15. python使用SQLAlchemy模块连接MySQL
  16. [CodeForces - 614B] B - Gena&#39;s Code
  17. matlabR2017安装
  18. xslt 和一个demo
  19. python---django中模板渲染(csrf令牌使用,自定义模板函数)
  20. [BZOJ4487][JSOI2015]染色问题(容斥)

热门文章

  1. C++入门经典-例4.8-同名的全局变量和局部变量
  2. eclipse中设置tab为4个空格
  3. vue组件化之模板优化及注册组件语法糖
  4. 在Tomcat中配置MySQL数据源
  5. Emacs Python 自动补全之 eglot
  6. iOS多选实现注意点
  7. The window object
  8. Google Home Mini配置失败解决办法
  9. TortoiseGit 中文汉化
  10. vue2.X + HTML5 plus 拍照和调用设备相册 另附 图片转base64和压缩图片方法