Scala之数组Array的方法全面总结(含实例操作)

本文详细介绍了Scala数组的各种操作方法,包括应用、合并、去交集、取交集、添加元素、折叠、遍历等,涵盖了数组的基本操作和高级用法,帮助开发者更好地理解和使用Scala数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Scala Array的方法

方法名描 述返回值类型举例结果
apply(i:int)按下标取数组数,同arr(i)数组元素类型Array(1,2,3,4,5).apply(3)4
++合并数组返回一个新数组,若不同类型以左边为准左边类型Array(1,2) ++ List(7,8,9)Array(1,2,7,8,9)
union合并两个序列,同操作符++左边类型Array(1,2) union List(3,4)Array(1,2,3,4)
++:同上两个类似,右边类型决定了结果的类型右边类型Array(1,2) ++: List(3,4)List(1,2,3,4)
diff去交集数组Array(1,2,3).diff(Array(2,4))Array(1,3)
intersect取交集数组Array(1,2,3).intersect(Array(2,4))Array(2)
+:在数组前面添加一个元素数组1+:Array(2,3)Array(1,2,3)
:+在数组后面加入一个元素数组Array(2,3):+4Array(2,3,4)
fold参数是一个值和一个操作操作结果Array(1,2,3,4).fold(5)(_+_)15
foldLeft参数是一个值和一个操作,从左到右计算操作结果Array(1,2,3,4).foldLeft(5)(_+_)15
/:foldLeft简写方式操作结果(5/:Array(1,2,3,4))(_+_)15
foldRight参数是一个值和一个操作,从右到左计算操作结果Array(1,2,3,4).foldRight(5)(_+_)15
:\foldRight简写操作结果(Array(1,2,3,4):\5)(_+_)15
addString将数组中的元素逐个添加到StringBuilder中StringBuilderArray(1,2,3).addString(new StringBuilder())123
addString(b:StringBuilder, sep:String)将数组中的元素逐个添加到StringBuilder中,并用分隔符分开StringBuilderArray(1,2,3).addString(new StringBuilder(),",")1,2,3
addString(b:StringBuilder, start:String, sep:String, end:String)同上,在首尾各加一个字符串,并指定sep分隔符StringBuilderArray(1,2,3).addString(new StringBuilder(),"{",",","}"){1,2,3}
charAt必须是字节数组,不常用可直接按数组下标取CharArray(‘a’,‘b’).charAt(0)a
clone复制数组的值,不会引用地址数组Array(1,2,3).cloneArray(1,2,3)
collect参数是偏函数偏函数处理后的数组Array(1,2).collect{case x if x%2==0 => x+1}3
collectFirst序列中查找第一个符合条件的元素并处理OptionArray(1,2).collectFirst{case x if x%2==0 => x+1}Option[Int] = Some(3)
combinations对数组进行排列组合,参数为个数迭代器Array(1,2,3).combinations(2).foreach(x=>print(x.mkString(",")+" "))1,2 1,3 2,3
contains判断是否包含元素BooleanArray(1,2).contains(1)true
containsSlice判断是否包含子集BooleanArray(1,2,3).containsSlice(Array(2))true
copyToArray数组复制,可有开始位置:目标的下标 len是原数组的长度Unitval a=Array(0,0,0); Array(1,2,3).copyToArray(a,1,2)0,1,2
copyToBuffer将数组中的元素复制到ArrayBuffer中Unitval a=new ArrayBuffer[Int]; Array(1,2,3).copyToBuffer(a)0,1,2
corresponds判断两数组长度是否相等并且对应位置元素是否符合条件BooleanArray(1,2).corresponds(Array(2,4))(_<_)true
count统计符合条件的个数IntArray(1,2,3).count(_<2)1
distinct去除重复元素数组Array(1,1,2).distinct1,2
drop从左边去除元素,参数是长度数组Array(1,2,3).drop(2)3
dropRight从右边去除元素,参数是长度数组Array(1,2,3).dropRight(2)1
dropWhile去除满足条件的元素直到遇到第一个不满足的结束数组Array(1,2,-1).dropWhile(_<2)2,-1
endsWith判断数组是否以某个序列结尾BooleanArray(1,2,3).endsWith(Array(2,3))true
startsWith判断数组是否以某个序列开始,可有偏移量BooleanArray(1,2,3).startsWith(Array(2,3),1)true
exists判断数组中是否存在满足条件的元素BooleanArray(1,2,3).exists(_>2)true
filter满足条件留下不满足过滤数组Array(1,2,3,1).filter(_< 3)1,2,1
find找第一个符合条件的元素OptionArray(1,2,3).find(_>1)2
flatten扁平化处理数组Array(Array(1,2,3),Array(4,5,6)).flatten1,2,3,4,5,6
flatMap先map然后flatten数组Array(Array(1,4),Array(3,5)).flatMap(_.map(_*2))2,8,6,10
forall检测序列中元素是否都满足条件,都满足为trueBooleanArray(1,2).forall(_>0)true
foreach遍历操作,无返回值UnitArray(1,2,3).foreach(print(_))123
groupBy按条件分组,返回一个Map类型每个key对应一个数组MapArray(1,2,3,4).groupBy((_%2==0))Map(false -> Array(1,3), true -> Array(2,4))
grouped按指定数量n分组,每个分组都有n个元素迭代器Array(1, 2, 3, 4).grouped(2).foreach(x=>print(x.mkString(",")))1,23,4
hasDefiniteSize检测序列是否存在有限的长度,对应Stream这样的流数据则返回falseBooleanStream(1).hasDefiniteSizefalse
head返回第一个元素元素类型Array(1,2,3).head1
headOption返回第一个元素的Option类型对象OptionArray(1,2,3).headOption1
indexOf(e[,i])返回元素e在第一次出现的索引,可指定开始下标IntArray(3,4,2).indexOf(4,2)-1(未找到)
indexOfSlice是否包含子数组,有的话返回第一次开始的下标,可指定开始下标IntArray(1,2,3,2,3).indexOfSlice(Array(2,3),0))1
indexWhere返回数组第一个满足条件的下标,可指定开始下标IntArray(1,2).indexWhere(_>0,1)1
last返回最后一个元素元素类型Array(1,2).last2
lastOption返回最后一个元素的Option类型对象OptionArray(1,2).lastOption2
lastIndexOf返回元素最后一次出现的下标,可有结束下标IntArray(1,1,1).lastIndexOf(1,2)2
lastIndexOfSlice是否包含子序列,返回最后一次出现序列的下标,可有结束下标IntArray(1,2,1,2).lastIndexOfSlice(Array(1,2),1)0
lastIndexWhere返回最后一个满足条件元素的下标IntArray(1,2).lastIndexWhere(_>0)1
init返回不包含最后一个元素的数组数组Array(1,2,3).init1,2
inits每一步进行init操作,最开始是自己,最后是空返回的,是迭代器[数组]迭代器Array(1,2,3).inits.foreach(x=>print(x.mkString("[",",","]")))[1,2,3][1,2][1][]
tail返回不包含第一个元素的数组数组Array(1,2,3,4).tail2,3,4
tails同inits,每一步都进行tail操作迭代器Array(1,2,3).tails.foreach(x=>print(x.mkString("[",",","]")))[1,2,3][2,3][3][]
isDefinedAt判断是否存在下标BooleanArray(1,2).isDefinedAt(3)false
isEmpty判断是否为空BooleanArray().isEmptytrue
nonEmpty判断是否不为空BooleanArray().nonEmptyfalse
indices返回索引集合RangeArray(1,2).indices0,1
iterator生成迭代器迭代器Array(1,2).iterator.foreach(print(_))12
isTraversableAgain判断序列是否可以反复遍历,对于Iterators返回falseBooleanArray(1,2).iterator.isTraversableAgainfalse
length返回数组长度IntArray(1,2).length2
lengthCompare比较数组长度和参数len,大小返回长度-lenIntArray(1,2).lengthCompare(1)1
map对数组中的元素进行操作并且返回一个新数组数组Array(1,2).map(_+10)11,12
max返回数组最大值元素类型Array(1,2).max2
maxBy返回数组中符合条件的第一个元素元素类型Array(1,2,3).maxBy(_>1)2
min返回数组最小值元素类型Array(1,2).min1
minBy返回数组中不符合条件的第一个元素元素类型Array(1,2,0).minBy(_>1)1
mkString将序列中所有元素拼接成一个字符串,可有开始符分隔符结束符StringArray(1,2).mkString("[",",","]")[1,2]
padTo(len,e)填充序列,如果当前数组长度小于len,那么新产生的数组长度是len,多出的几个位值填充e,若当前数组大于等于len返回当前数组数组Array(1,2).padTo(5,0)1,2,0,0,0
partition按条件将序列拆分成两个数组,满足条件的放到第一个数组,其余的放到第二个数组,返回的是包含这两个数组的元组二元组Array(1,2).partition(_%2==0)Array(2),Array(1)
patch(i,arr,len)批量替换,从原序列的i处开始后面的len个元素,将被替换成数组arr数组Array(1,2,3,4).patch(0,Array(7,8),1)7,8,2,3,4
permutations对数组进行全排列Ann迭代器Array(1,2,3).permutations.foreach(x=>print(x.toVector.mkString("[",",","]")))[1,2,3][1,3,2][2,1,3][2,3,1][3,1,2][3,2,1]
prefixLength给定一个条件,返回数组中满足条件元素的个数IntArray(1,2,3,4).prefixLength(_< 3)2
product返回所有元素乘积的值要求是数值型Array(1,2,3,4,5).product120
reduce同fold,但是参数只有操作不需要初始值元素类型Array(1,2,3,4).reduce(_+_)10
reduceLeft参数只有操作不需要初始值,从左向右元素类型Array(1,2,3,4).reduceLeft(_+_)10
reduceRight参数只有操作不需要初始值,从右向左元素类型Array(1,2,3,4).reduceRight(_+_)10
reduceLeftOption参数只有操作不需要初始值,从左向右计算,返回一个OptionOptionArray(1,2,3,4).reduceLeftOption(_+_)10
reduceRightOption参数只有操作不需要初始值,从右向左OptionArray(1,2,3,4).reduceRightOption(_+_)10
reverse反转序列,可用于降序排列数组Array(1,4,3,2).sorted.reverse4,3,2,1
reverseIterator生成反向迭代器迭代器Array(1,2,3).reverseIterator.foreach(print)321
reverseMap先map再反转数组Array(1,2,3,4).reverseMap(_*3)12,9,6,3
sameElements判断两个序列是否都相等,即长度相等和对应下标元素相等BooleanArray(1,2,3).sameElements(Array(1,2,3))true
scan参数是一个数值和操作,会从这个数值起,把每一步的操结果放到一个新的数组中返回数组Array(1,2,3).scan(4)(_+_)4,5,7,10
scanLeft参数是一个数值和操作,会从这个数值起,把每一步的操结果(从左到右)放到一个新的数组中返回数组Array(1,2,3).scanLeft(4)(_+_)4,5,7,10
scanRight参数是一个数值和操作,会从这个数值起,把每一步的操结果(从右到左)放到一个新的数组中返回数组Array(1,2,3).scanRight(4)(_+_)10,9,7,4
segmentLength(f,i)从序列的下标i开始向后查找,返回满足条件f的连续元素的长度,直到第一个不满足条件结束IntArray(1,2,4,3).segmentLength(_<4,0)2
seq产生一个引用当前序列的sequential视图视图Array(1,2,3,4).seqWrappedArray(1,2,3,4)
size返回数组元素个数 同lengthIntArray(1,2,3,4).size4
slice(i,j)返回当前序列中从i到j之间的序列,不包括j处的元素数组Array(1,2,3,4).slice(0,3)1,2,3
sliding(n,step)滑动,从第一个元素开使取参数n个元素,然后第二个直到不够n个元素结束滑动,可设置步长step即第一个元素取完不从第二个元素滑动迭代器Array(1,2,3,4).sliding(2,2).foreach(x=>print(x.mkString(",")+" "))1,2 3,4
sortBy按指定的排序规则对序列排序数组Array(3,2,1,4).sortBy(x=>0-x)4,3,2,1
sorted自然排序,默认升序数组Array(3,2,1,4).sorted1,2,3,4
span将序列拆分成两个数组,从第一个元素开始,直到第一个不满足条件的元素为止,其中满足条件的元素放到第一个数组,其余的放到第二个数组,返回的是包含这两个数组的元组二元组Array(1,2,3,4).span(x=>x%2!=0)Array(1), Array(2,3,4)
splitAt从指定位置开始,把数组拆分成两个数组 前一个数组不包括该下标二元组Array(1,2,3,4).splitAt(3)Array(1,2,3), Array(4)
stringPrefix返回toString结果的前缀StringArray(1,2,3,4).stringPrefixString = [I
subSequence(i,j)返回i和j间的字符数组,不包含j处的元素CharSequenceArray(‘1’,‘2’,‘3’,‘4’).subSequence(0,3)123
sum求和,元素需要是数值类型元素类型Array(1,2,3,4).sum10
take(n)返回当前数值中前n个元素组成的数组数组Array(1,2,3,4).take(3)1,2,3
takeRight(n)返回当前数组中从右边开始后n个元素组成的数组数组Array(1,2,3,4).takeRight(3)2,3,4
takeWhile返回从第一个元素开始,满足条件的元素组成的数组,直到第一个不满足条件的停止数组Array(1,2,3,1).takeWhile(_<=2)1,2
toArray转换成Array类型ArrayList(1,2,3,4).toArray1,2,3,4
toBuffer转换成Buffer类型BufferArray(1,2,3,4).toBuffer1,2,3,4
toIndexedSeq转换成IndexedSeq类型IndexedSeqArray(1,2,3,4).toIndexedSeq1,2,3,4
toIterable转换成可迭代的类型IterableArray(1,2,3,4).toIterable1,2,3,4
toIterator转换成迭代器,同iterator方法IteratorArray(1,2,3,4).toIteratorIterator[Int] = non-empty iterator
toList转换成List类型ListArray(1,2,3,4).toList1,2,3,4
toMap转换成Map类型,需要被转化序列中包含的元素是Tuple2类型MapArray(1,2,3,4).map((_,1)).toMapMap(1 -> 1, 2 -> 1, 3 -> 1, 4 -> 1)
toSeq转换成Seq类型SeqArray(1,2,3,4).toSeq1,2,3,4
toSet转换成Set类型SetArray(1,2,3,4).toSet1,2,3,4
toStream转换成Stream类型StreamArray(1,2,3,4).toStreamStream(1, ?)
toVector转换成Vector类型VectorArray(1,2,3,4).toVector1,2,3,4
transpose矩阵转置,二维数组行列转换数组Array(Array(1,2,3),Array(4,5,6),Array(7,8,9)).transposeArray(Array(1, 4, 7), Array(2, 5, 8), Array(3, 6, 9))
zip将两个序列对应位置上的元素组成一个元组,只取两者下标相同的元组数组Array(1,2,3,4).zip(Array(‘a’,‘b’,‘c’,‘d’,‘e’))Array((1,a), (2,b), (3,c), (4,d))
zipAll(arr,a2,a3)不足的自动填充,如果前面序列短,不足的元素填充为第二个参数,如果后面短,填充为第三个参数元组数组Array(1,2,3,4).zipAll(Array(‘a’,‘b’,‘c’,‘d’,‘e’),1,‘a’)Array((1,a), (2,b), (3,c), (4,d), (1,e))
zipWithIndex每个元素和它的下标组成一个2元组数组元组数组Array(1,2,3,4,5).zipWithIndexArray((1,0), (2,1), (3,2), (4,3), (5,4))
unzip将含有二元组的数组,每个元组的第一个元素组成一个数组,第二个元素组成一个数组二元组Array((1,‘a’), (2,‘b’), (3,‘c’), (4,‘d’)).unzip(Array(1, 2, 3, 4),Array(a, b, c, d))
unzip3将含有三元组的数组,每个元组的第一个元素组成一个数组,第二个元素组成一个数组,第三个元素组成一个数组,返回包含这三个数组的三元组三元组Array((1,2,3),(“a”,“b”,“c”)).unzip3(Array(1, a),Array(2, b),Array(3, c))
update(i,x)将数组中下标i处的元素更新为xUnitval a=Array(1,2,3,4); a.update(0,0);a0,2,3,4
updated(i,x)将数组中下标i处的元素更新为x,并返回替换后的数组数组Array(1,2,3,4).updated(0,0)0,2,3,4
view(i,j)返回当前序列中从i到j之间的序列,不包括j处的元素IndexedSeqViewArray(1,2,3,4).view(0,3).mkString(",")1,2,3
withFilter根据条件p过滤元素FilterMonadicArray(1,2,3,4).withFilter(_>2).map(x=>x)3,4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值