频道栏目
首页 > 网络 > 云计算 > 正文
云计算中Scala数组操作技巧
2018-02-18 01:10:41      个评论    来源:kebu12345678的博客  
收藏   我要投稿

Scala数组操作:

1.定长数组

长度不变的数组的声明:

 

//长度为10的整数数组,所有元素初始化为0??

?val?numArr?=?new?Array[Int](10)??

??

//长度为10的字符串数组,所有元素初始化为null??

val?numArr?=?new?Array[String](10)??

??

//长度为2的数组,数据类型自动推断出来,已经提供初始值就不需要new关键字??

val?s?=?Array("cai","yong")??

??

//通过ArrayName(index)访问数组元素和更改数组元素??

val?s?=?Array("cai","yong")??

?println(s(0))??

s(0)?=?"haha"??

println(s(0))??输出:
cai
haha

2.变长数组:数组缓冲

Scala也支持长度变化的数组,支持的数据结构是ArrayBuffer

 

//一个空的数组缓冲,准备存放整数??

?val?ab?=?ArrayBuffer[Int]()??

?val?ab2?=?new?ArrayBuffer[Int]??

??

//用+=在尾部添加元素??

ab?+=?2??

??

//在尾部添加多个元素??

ab?+=?(1,2,3,4,5)??

??

//通过++=往数组缓冲后面追加集合??

?ab?++=?Array(6,7,8,9)??

??

//使用trimEnd(n)移除尾部n个元素??

ab.trimEnd(3)??

??

//在下标3之前插入元素??

ab.insert(3,?33)??

??

//插入多个元素,第一个值为index,后面所有的值为要插入的值??

ab.insert(3,3,4,5,6)??

??

//移除某个位置的元素??

ab.remove(3)??

??

//移除从下标为n开始(包括n)的count个元素??

ab.remove(n,?count)??
??????? 有时候需要构造一个Array,但是不知道具体要存放多少元素,可以先构造ArrayBuffer,再调用toArray方法转化成Array,同样,对Array调用toBuffer方法可以转成ArrayBuffer.

注:在数组缓冲的尾部进行元素添加移除操作的效率很高,但是在任意位置插入或移除元素的效率并不太高效,因为涉及到数组元素的移动。
 

//for循环遍历??

for(i?<-?0?until?ab.length){??

?print(ab(i)?+?",?")??

?}??

??

//根据特定步长遍历数组??

for(i?<-?0?until?(ab.length,?2)){??

?print(ab(i)?+?",?")??

?}??

??

//从数组的尾部开始向前遍历数组??

for(i?<-?(0?until?ab.length).reverse){??

?print(ab(i)?+?",?")??

}??

??

//类似于Java中的foreach遍历数组??

?for(elem?<-?ab){??

?print(elem?+?",?")??

}

//进行数组转换会生成一个新的数组,而不会修改原始数组??

?val?change?=?for(elem?<-?ab)?yield?elem?*?2??

for(elem?<-?change){??

print(elem?+?",?")??

?}??

??

//添加一个守卫的数组转换??

val?change?=?for(elem?<-?ab?if?elem%2?==?0)?yield?elem?*?2??

5.数组操作常用算法

//sum求和(数组与阿奴必须是数值型数据)??

println(change.sum)??

??

//min?max?输出数组中最小和最大元素??

println(change.min)??

println(change.max)??

??

//使用sorted方法对数组或数组缓冲进行升序排序,这个过程不会修改原始数组??

?val?sortArr?=?ab.sorted???

?for(elem?<-?sortArr)??

?print(elem?+?",?")??

??

//使用比较函数sortWith进行排序??

val?sortArr?=?ab.sortWith(_>_)??

??

//数组显示??

?println(sortArr.mkString("|"))??

?println(sortArr.mkString("startFlag","|","endFlag"))??

6.多维数组

//构造一个2行3列的数组??

val?arr?=?Array.ofDim[Int](2,3)??

println(arr.length)??

println(arr(0).length)??

arr(0)(0)?=?20??

println(arr(0)(0))??

??

//创建长度不规则的数组??

val?arr?=?new?Array[Array[Int]](3)??

????????

?for(i?<-?0?until?arr.length){??

arr(i)?=?new?Array[Int](i?+?2)??

}??

????????

for(i?<-?0?until?arr.length){??

println(arr(i).length)??

}

点击复制链接 与好友分享!回本站首页
上一篇:BlockManager架构原理、运行流程图和源码解密
下一篇:Scala定义函数的5种方式
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站