scala 数组函数大全
-
数组简介
1、数组的长度是不允许改变的,元素是可以改变的
2、var arr:Array[T]=new Array[T](capacity) //声明数组
3、var arr:Array[T]=Array(T V1,T v2...) //值已知
var arr:Array[Int]=Array.range(begin,end,step)4、arr.foreach(println) //数组遍历
-
创建数组
在 window DOS 窗口,输入 scala 进入scala命令行
定义数组:val a1= Array.range(1,4) val a2=Array("a","b","c")
-
数组函数汇总
1.新增
++ | union | +: | :+ |
clone | copyToArray | copyToBuffer |
描述: 合并两个序列,若序列类型不同以左边序列类型为主;若泛型类型不同以两个序列共同的最小父类为结果类型;
scala> a1++a2
res0: Array[Any] = Array(1, 2, 3, a, b, c)
scala> a1.union(a2)
res1: Array[Any] = Array(1, 2, 3, a, b, c)
方法名: +:
描述:在数组前面添加一个元素,结果泛型类型取元素类型和数组类型的共同最小父类
scala> 4+:a1
res2: Array[Int] = Array(4, 1, 2, 3)
方法名: :+
描述: 在数组后面添加一个元素(添加的元素在后,就在数组尾部添加,冒号要离数组近);和 +: 相反
示例:
scala> a1:+5
res4: Array[Int] = Array(1, 2, 3, 5)
方法名:copyToArray
描述: 将集合中的元素从0开始,拷贝到参数1数组从startPos开始长度为len数组中
示例:
scala> var a3=Array.range(1,5)
a3: Array[Int] = Array(1, 2, 3, 4)
scala> var a4=Array.range(5,8)
a4: Array[Int] = Array(5, 6, 7)
scala> a4.copyToArray(a3,0,2)
scala> a3
res6: Array[Int] = Array(5, 6, 3, 4)
方法名:copyToBuffer
描述: 将集合中的所有元素拷贝至参数buffer中
示例:
scala> import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ArrayBuffer
scala> var builder = new ArrayBuffer[Int]()
builder: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()
scala> a3.copyToBuffer(builder)
scala> builder
res8: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(5, 6, 3, 4)
2.空/长度
isEmpty | nonEmpty | hasDefiniteSize | length |
size | lengthCompare | prefixLength | segmentLength |
方法名: isEmpty
描述: 判断序列是否为空
示例:
scala> a1.isEmpty
res9: Boolean = false
方法名:nonEmpty
描述:判断序列是否不为空
scala> a1.nonEmpty
rES10: Boolean = true
方法名:hasDefiniteSize
描述: 检测序列是否存在有限的长度,对应 Stream 类型的流数据则返回 false
示例:
scala> a1.hasDefiniteSize
res11: Boolean = true
scala> a1.toStream.hasDefiniteSize
res13: Boolean = false
方法名:length 等同于 size
描述: 返回序列元素个数
示例:
scala> a1.length
res14: Int = 3
scala> a1.size
res17: Int = 3
方法名:lengthCompare
描述: 比较序列的长度和参数 len,返回序列的长度 - len
示例:
scala> a1.lengthCompare(5)
res16: Int = -2
方法名:prefixLength
描述: 返回序列中满足条件的元素数量,如果第一个元素就不满足返回0,到第一个不满足条件的元素为止
示例:
scala> a1.prefixLength(_>1)
res18: Int = 0
scala> a1.prefixLength(_<2)
res19: Int = 1
方法名:segmentLength
描述:返回一个从fromIndex开始连续满足参数1条件的元素数量
示例:
scala> var a5 = Array(0,1,3,10,15,21)
a5: Array[Int] = Array(0, 1, 3, 10, 15, 21)
scala> a5.segmentLength(_<15,2)
res20: Int = 2
3.索引
indices | isDefineAt | indexOf | indexOfSlice |
indexWhere | lastIndexOf | lastIndexOfSlice | lastIndexWhere |
方法名:indices
描述: 返回当前序列索引集合
示例:
scala> a1.indices
res21: scala.collection.immutable.Range = Range 0 until 3
方法名:isDefineAt
描述: 判断序列中是否存在指定索引
示例:
scala> a1.isDefinedAt(2)
res23: Boolean = true
scala> a1.isDefinedAt(5)
res24: Boolean = false
方法名:indexOf
描述:返回元素 elem 在序列中第一次出现的索引,也可以指定索引 (包括)from从左向右开始查找,找不到返回-1;
示例:
scala> a1.indexOf(2)
res26: Int = 1
scala> a1.indexOf(4)
res27: Int = -1
scala> a1.indexOf(2,1)
res29: Int = 1
方法名:indexOfSlice
描述:检测当前序列中是否包含序列 that,并返回第一次出现该序列的索引
示例:
scala> val b = Array(2, 3)
b: Array[Int] = Array(2, 3)
scala> a1.indexOfSlice(b)
res33: Int = 1
方法名:indexWhere
描述:返回当前序列中第一个满足条件 p 的元素的索引,可以指定从索引 from 开始查找
示例:
scala> val a = Array(1, 2, 3, 4)
a: Array[Int] = Array(1, 2, 3, 4)
scala> a.indexWhere(_>2)
res40: Int = 2
scala> a.indexWhere(_>2,3)
res41: Int = 3
方法名:lastIndexOf
描述:返回元素 elem 在序列中最后一次出现的索引
示例:
scala> val a = Array(1, 3, 2, 3, 4)
a: Array[Int] = Array(1, 3, 2, 3, 4)
scala> a.lastIndexOf(3)
res42: Int = 3
方法名:lastIndexOfSlice
描述: 检测当前序列中是否包含序列 that,并返回最后一次出现该序列的索引
示例:
scala> val a = Array(1, 2, 3, 2, 3, 4)
a: Array[Int] = Array(1, 2, 3, 2, 3, 4)
scala> val b = Array(2, 3)
b: Array[Int] = Array(2, 3)
scala> a.lastIndexOfSlice(b)
res43: Int = 3
方法名:lastIndexWhere
描述: 返回当前序列中最后一个满足条件 p 的元素的索引
示例:
val a = Array(1, 2, 3, 2, 3, 4)
scala> a.lastIndexWhere(_>2)
res45: Int = 5
4.提取
apply | applyOrElse | charat | find |
head | tail | tails | last |
init | inits | headOption | lastOption |
方法名:apply
描述: 按下标取数组数据
示例:
scala> a1
res47: Array[Int] = Array(1, 2, 3)
scala> a1.apply(1)
res48: Int = 2
方法名:applyOrElse
描述: applyOrElse(index,{item:Int=>default value}),根据下标取数组元素,如果越界,则返回默认值,第二个参数为偏函数
示例:
scala> a1.applyOrElse(0,{i:Int=>None})
res52: Any = 1
scala> a1.applyOrElse(5,{i:Int=>None})
res53: Any = None
方法名:charat
描述: 根据索引取字符,只能是字符数组
示例:
scala> var a4 = Array('a','d','g')
a4: Array[Char] = Array(a, d, g)
scala> a4.charat(1)
res54: Char = d
方法名:head
描述: 返回序列的第一个元素,如果序列为空会报错
示例:
scala> a1.head
res55: Int = 1
方法名:headOption
描述: 返回序列的第一个元素的 Option 类型对象,就是scala.some 或者 None,如果序列为空,则返回 None
示例:
scala> a1.headOption
res57: Option[Int] = Some(1)
scala> var lst:Array[Int]=Array()
lst: Array[Int] = Array()
scala> lst.headOption
res58: Option[Int] = None
方法名:tail
描述: 返回当前序列中不包含第一个元素的序列
示例:
scala> a1.tail
res59: Array[Int] = Array(2, 3)
方法名:tails
描述: 对序列进行tail迭代
示例:
scala> a1.inits.foreach(x=>{x.foreach(print);println})
123
12
1
方法名:last
描述: 返回序列的最后一个元素,如果序列为空,将引发错误
示例:
scala> a1.last
res63: Int = 3
方法名:lastOption
描述: 返回序列的最后一个元素的 Option 类型对象,如果序列为空,则返回 None
示例:
scala> a1.lastOption
res64: Option[Int] = Some(3)
scala> lst.lastOption
res66: Option[Int] = None
方法名:init
描述: 返回当前序列中不包含最后一个元素的序列
示例:
scala> a1.init
res67: Array[Int] = Array(1, 2)
方法名:inits
描述: 对集合中的元素进行 init 迭代操作,该操作的返回值中, 第一个值是当前序列的副本,最后一个值为空
示例:
scala> a1.inits.foreach(x=>{x.foreach(print);println})
123
12
1
scala> a1.find(_>1)
res69: Option[Int] = Some(2)
5.删除、过滤
drop | dropRight | dropWhile |
filter | withFilter | filterNot |
scala> a1.drop(2)
res70: Array[Int] = Array(3)
方法名:dropRight
描述: 删除数组右边的n个元素
示例
scala> a1.dropRight(1)
res73: Array[Int] = Array(1, 2)
scala> a1.dropRight(4)
res74: Array[Int] = Array()
方法名:dropWhile
描述: 删除数组中符合条件的元素,若第一个元素就不符合条件,则不删除,从第一个符合条件的开始删除,到第一个不符合条件的结束
示例
scala> a1.dropWhile(_%2==0)
res77: Array[Int] = Array(1, 2, 3)
scala> a1.dropWhile(_%2==1)
res78: Array[Int] = Array(2, 3)
方法名:filter
描述: 保留满足条件的元素
示例
scala> a1.filter(_>2)
res79: Array[Int] = Array(3)
scala> a1.filter(_%2==0)
res80: Array[Int] = Array(2)
方法名:withFilter
描述: 保留满足条件的元素
示例
scala> a1.withFilter(_%2==0).map(x=>x)
res83: Array[Int] = Array(2)
scala> a1.withFilter(_%2==1).map(x=>x)
res84: Array[Int] = Array(1, 3)
方法名:filterNot
描述: 移除满足条件的元素
示例
scala> val a = Array(1, 2, 3, 4, 0)
a: Array[Int] = Array(1, 2, 3, 4, 0)
scala> a.filterNot(x => x > 2)
res85: Array[Int] = Array(1, 2, 0)
6.包含
contains | containsSlice | startsWith | endsWith |
collect | collectFirst | forall | exists |
方法名:contains
描述: 判断序列中是否包含指定对象
示例
scala> a1.contains(2)
res86: Boolean = true
方法名:containsSlice
描述: 判断当前序列中是否包含另一个序列
示例
scala> a1.containsSlice(Array(1,2))
res87: Boolean = true
scala> a1.containsSlice(Array(1,3))
res88: Boolean = false
方法名:startsWith
描述: 当前序列是否以参数序列开始
示例
scala> a1.startsWith(Array(1,2))
res90: Boolean = true
方法名:endsWith
描述:当前序列是否以参数序列结尾
示例
scala> a1.endsWith(Array(3,4))
res91: Boolean = false
scala> a1.endsWith(Array(3))
res92: Boolean = true
scala> a1.endsWith(Array(2,3))
res93: Boolean = true
方法名:collect
描述: 输入参数类型为偏函数,对序列中的元素进行转换
示例
scala> a1.collect({case i if i%2==1 =>2*i})
res96: Array[Int] = Array(2, 6)
方法名:collectFirst
描述:查找序列中第一个符合偏函数的元素 返回Option类型
示例
scala> a1.collectFirst({case i if i%2==0 =>i})
res97: Option[Int] = Some(2)
方法名:forall
描述:集合中的元素是否都满足条件
示例
scala> val a = Array(1, 2, 3, 4)
a: Array[Int] = Array(1, 2, 3, 4)
scala> a.forall(x => x > 0)
res98: Boolean = true
scala> a.forall(x => x > 2)
res99: Boolean = false
方法名:exists
描述: 判断当前数组是否包含符合条件的元素
示例
scala> a1.exists(x=>x==3)
rES100: Boolean = true
7.比较
canEqual | sameElements | corresponds |
方法名:canEqual
描述: 两个集合之间是否可以比较,集合中都可以比但equals比较地址
示例
scala> a1.canEqual(a2)
rES101: Boolean = true
方法名:sameElements
描述: 两个序列是否值相同,长度相同,同一索引下的值相同
示例
scala> val a = Array(1, 2, 3, 4)
a: Array[Int] = Array(1, 2, 3, 4)
scala> val b = Array(1, 2, 3, 4)
b: Array[Int] = Array(1, 2, 3, 4)
scala> val c = Array(1, 3, 2, 4)
c: Array[Int] = Array(1, 3, 2, 4)
scala> a.sameElements(b)
rES102: Boolean = true
scala> a.sameElements(c)
rES103: Boolean = false
方法名:corresponds
描述: a1和a2长度相同,同一位置的元素必须符合条件
示例
scala> a.corresponds(b)(_==_)
rES104: Boolean = true
8.遍历
foreach | iterator | isTraversableAgain | repr |
scala> a.foreach(x => println(x * 10))
10
20
30
40
scala> a
res110: Array[Int] = Array(1, 2, 3, 4)
scala> a.iterator
res111: Iterator[Int] = <iterator>
scala> a.iterator.next
res112: Int = 1
方法名:isTraversableAgain
描述: 是否可以重复遍历
示例
scala> a.isTraversableAgain
res113: Boolean = true
scala> a.iterator.isTraversableAgain
res114: Boolean = false
方法名:repr
描述:将对象转化为供解释器读取的形式
示例
scala> a.repr
res115: Array[Int] = Array(1, 2, 3, 4)
9.排序、排列、反转、转置
combinations | permutations | transpose |
sorted | sortWith | sortBy |
reverse | reverseIterator | reverseMap |
描述:排列组合,不考虑顺序,n任意选择集合中n个集合组合
示例
scala> a2.combinations(2).foreach(x=>{x.foreach(print);println()})
ab
ac
bc
方法名:permutations
描述:所有元素不同不同顺序的排列
示例
scala> a2.permutations.foreach(x=>{x.foreach(print);println()})
abc
acb
bac
bca
cab
cba
方法名:transpose
描述:矩阵转置
示例
scala> var a = Array(Array(1,2),Array(3,4))
a: Array[Array[Int]] = Array(Array(1, 2), Array(3, 4))
scala> a.transpose
res120: Array[Array[Int]] = Array(Array(1, 3), Array(2, 4))
10.拼接、替换
addString | mkString | stringPrefix | patch |
padTo | update | updated |
11.数学
max | maxBy | min | minBy | product |
sum | diff | intersect | distinct | count |