Scala数组操作

定长数组:

长度不变的数组Array,如:声明一个长度为10的整形数组,val arr = Array[Int](10);声明并初始化一个字符串数组: val arrStr = Array(“wo”,”cha”,”yo”)。访问数组方式:访问arrStr第一个元素,arrStr(1)即可

变长数组(即数组缓冲)

java中有ArrayList和scala中的ArrayBuffer等效;但是ArrayBuffer更加强大,通过下面的事列来熟悉ArrayBuffer:

import collection.mutable.ArrayBuffer

val arrbuff1 = ArrayBuffer[Int]()

val arrBuff2 = ArrayBuffer(1,3,4,-1,-4)

arrbuff1 += 23 //用+=在尾端添加元素

arrbuff1 += (2,3,4,32) //同时在尾端添加多个元素

arrbuff1 ++= arrBuff2 //可以用 ++=操作符追加任何集合

arrbuff1 ++= Array(2,43,88,66)

arrbuff1.trimEnd(2) //移除最后的2个元素

arrbuff1.remove(2) //移除arr(2+1)个元素

arrbuff1.remove(2,4) //从第三个元素开始移除4个元素

val arr = arrbuff1.toArray //将数组缓冲转换为Array

val arrbuff2 = arr.toBuffer //将Array转换为数组缓冲

遍历数组和数组缓冲:

在java中数组和数组列表/向量上语法有些不同。scala则更加统一,通常情况,我们可以用相同的代码处理这两种数据结构,for(…) yield 循环创建一个类型和原集合类型相同的新集合。for循环中还可以带守卫:在for中用if来实现。

for(i <- 0 until arrbuff1.length) yield arrbuff1(i) * 2 //将得到ArrayBuffer(2,6,4,-2,-4)

for(i <- 0 until (arrbuff1.length,2)) yield arrbuff1(i) * 2 //将得到ArrayBuffer(12,-4)

for(elem <-0 arrbuff1) print(elem) //如果不需要使用下标,用这种方式最简单了

for(i <- arrbuff1 if arrbuff1 > 0) print i //打印出arrbuff1中为整数的值

arrbuff1.filter( _ > 0).map{ 2 * _} //生成arrbuff1中的正数的两倍的新集合

arrbuff1.filter map //另一种写法

常用算法:

scala有很多便捷内建函数,如

arrbuff1.sum //对arrbuff1元素求和

Array("asd","sdf","ss").max //求最大元素

arrbuff1.sorted(_ < _) //将arrbuff1元素从小到大排序

arrbuff1.sorted(_ < _) //将arrbuff1元素从小到大排序

util.Sorting.quickSort(Array) //针对数组排序,单不能对数组缓冲排序

val arr = Array(1,23,4,2,45)arr.mkString(",") //指定分割符

arr.mkString("(",",",")") //指定前缀、分隔符、后缀

更多函数参见Scaladoc

多维数组:

val matrix = Array.ofDim[Int](5,4) //三行四列的二维数组

matrix(2)(3) //访问第二行、第三个元素

scala数组和java互操作:

由于scala数组是用java数组实现的,所以可以在java和scala之间来回传递,引入scala.collectin.JavaConversion ,可以在代码中使用scala缓冲,在调用java方法时,这些对象会被自动包装成java列表。反过来讲,引入scala.collection.asScalaBuffer时,当java方法返回java.util.List时,我们可以让它转换成一个Buffer。

原文发布于微信公众号 - 加米谷大数据(DtinoneBD)

原文发表时间:2018-04-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端吧啦吧啦

涨薪必备Javascript,快点放进小口袋!

14720
来自专栏静晴轩

JavaScript对象length

前几日有在Javascript数组操作一文中稍提及了数组的length属性;深入一点探究,就发现JS这length确有许多难为所知的特性。这就边学边探究下这朵奇...

38580
来自专栏达摩兵的技术空间

js对象属性

相信对于对象属性大家都或多或少的知道一些,那么本文从属性说开去,看看大家对属性的了解是否有遗漏的部分。

34110
来自专栏along的开发之旅

C#三元运算符?:高级点的用法

当看到,(selectionMethod==0)?(ISelectionMethod)new EliteSelection():            ...

14030
来自专栏函数式编程语言及工具

Scalaz(18)- Monad: ReaderWriterState-可以是一种简单的编程语言

  说道FP,我们马上会联想到Monad。我们说过Monad的代表函数flatMap可以把两个运算F[A],F[B]连续起来,这样就可以从程序的意义上形成一种串...

20570
来自专栏静晴轩

类数组借用数组方法

于JavaScript如何将对象转化为数组对象,其用法写法已经很常见且完善,比如JQuery中的makeArray函数对此的实现,也是跟大家想的差不多,只是考虑...

37690
来自专栏Java进阶之路

Java8 Optional 的正确使用方式

20400
来自专栏web前端教室

不学不知道,sort()方法中的坑

今天的前端零基础课,在讲到js中的sort()排序方法的时候,说sort()这个方法在给数字排序的时候,根本不是按数字大小来排序的。 它是把数字都当成字符串来看...

197100
来自专栏软件开发

JavaSE学习总结(八)—— 异常处理(Exception)

一、理解异常及异常处理的概念 异常就是在程序的运行过程中所发生的不正常的事件,它会中断正在运行的程序。 异常不是错误 程序中关键的位置有异常处理,提高程序的稳定...

23490
来自专栏xx_Cc的学习总结专栏

iOS-正则表达式的简单使用

46570

扫码关注云+社区

领取腾讯云代金券