Scala中集合Array的方法

==Scala中集合Array的方法: ==

1、可以在电脑的DOS窗口输入:scala
2、创建一个数据组:var arr01=Array.range(1,10)
3、输入:arr02.
4、点击Tab键

首先声明四个测试数据:

第一个:
	var arr01 = Array(1,2,3,4,5,6,7,8,9)
	等同于:
	var arr02:Array[Int]=Array(1,2,3,4,5,6,7,8,9)
	等同于:
	var arr03=Array.range(1,10)
第二个:	
	var arr04=Array(2,4,6,"abc")
第三个:	
	var a = Array(4, 9, 7, 32, 7, 5, 3, 1, 2, 6)
第四个:
	var b = Array(1, 2, 3, 4, 5, 6, 7)
	var c=Array(1,2,3,4)

1、函数名:== 或者 !=(面向引用类型或者值类型的区别)

面向引用类型时:==和equals以及!=都是比较地址
解释:比较两个数组的地址是否相同
例 :scala> arr01==arr02
	res0: Boolean = false
	
	scala> arr01.equals(arr02)
	res1: Boolean = false
	
	scala> arr01!=arr02
    res2: Boolean = true
    
面向基本值类型:== , != , equals都是比较两个值是否相等
    scala> 1==1
	res0: Boolean = true
	
	scala> 1!=1
	res1: Boolean = false

	scala> 1.equals(1)
    res2: Boolean = true
注:可以自定义一个方法来比较两个引用类型的值
在IDEA中写方法:
步骤:
	导包:import scala.util.control.Breaks._(为了实现循环的中断)
import scala.util.control.Breaks._
object Test {
  def main(args: Array[String]): Unit = {
    def same(a1: Array[Int], a2: Array[Int]): Boolean = {
      var same: Boolean = true
      if (a1.size != a2.size) {
        same = false
      } else {
        breakable {
          for (i <- 0 until a1.size) {
            if (a1(i) != a2(i)) {
              same = false
              break()
            }
          }
        }
      }
      same
    }

    var arr01=Array.range(1,5)
    var arr02=Array.range(1,5)

    println(same(arr01,arr02))
  }
}

在这里插入图片描述

对于集合元素

新增集合(元素)

+:  
 	 T +: arr   在数组前添加T,(单个元素或者把集和当作一个整体添加Array[Any] = Array(Array(1, 2, 3), a, b, c)) 
:+  
	 arr:+T 在集合后添加元素,同+:
++:   
     合并集合,右边集合种类决定返回的集合种类
++ 
   	:Array(Any)  (:后为返回值类型,下同)
A++B,合并A,B两个集合,可以不同类型
	 scala> arr01++arr02
	 res4: Array[Any] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 4, 6, abc)
union(B)    
	 合并两个集合,同++类型可不同
diff(b):Array[T] 
	 取两个集合的差集,返回a中b不存在的元素
interstect(b):Array[T] 
	 取两个集合的交集,a和b中都存在的元素
combinations(n:Int)  
	 任选集合中的n个元素进行组合(返回一个迭代器)
padTo(len:Int,elem:T)  
	 用指定元素填充为指定长度的新数组
clone 
	 创建一个数组的副本,赋值数组的值,不会赋值地址,浅克隆
copyToArray(b):Unit 
  	 将当前的集合复制到b集合中,无返回值
copyToArray(b,start)
	 将集合拷贝到另一个数组中,从start开始
copyToArray(b,start,Len) 
	 将集合元素从0开始拷贝到参数1数组从start开始长度为Lend 的数组中
copyToBuffer(Buffer[B])
	 将数组中的元素复制到Buffer中
seq:IndexedSeq[T] 
	 产生一个引用当前序列的sequential视图,就是一个特殊的集合

distinct()
	  去除当前集合的重复元素
drop(n:Int) 
	  删除数组前n个元素,返回新数组
dropRight(n:Int) 
   	  删除尾部的n个元素
dropWhile(B) 
	  删除满足条件的的元素,返回剩余的数组,如果遇到不满足的元素,则不在继续寻找后面元素
init
	 去尾,返回当前序列不包含最后一个元素的序列
inits  Iterator 
	 重复init,对每次init生成的集合进行init,于tails类似
tail 
	 去头,返回当前序列不包含第一个元素的序列,
tails:Iterator   
	 重复执行tails,对生成的新的序列进行去头,
	 scala> c.tails.toArray
	 res32: Array[Array[Int]] = Array(Array(1, 2, 3, 4), Array(2, 3, 4), Array(3, 4), Array(4), Array())

改(操作)

patch(from:Int,that,n:Int)  
	 批量替换,从from开始后的n个元素组成的序列替换为that
permutations : Iterator   
	 排列组合,考虑顺序,不能指定个数,
transform(x=>Int):WrappedArray[Int]  
	 讲集合中的元素转换成指定的元素(同类型) 
	 scala> var a=Array(1,2,3)
     scala> a.transform(x=>7)
     scala.collection.mutable.WrappedArray[Int] = WrappedArray(7, 7, 7)
updat(i:Int,x:Int):Unit   
	 将集合中i位置的元素更新为x(同类型)修改原数组
updated(index:Int,elem:A) :Array[A]   
	 将集合中i位置的元素更新为x(任意类型) ,并返回更新后的数组
reverse:Array[T] 
	 反转序列
reverseIterator:Iterator[T] 
	 生成反向迭代器
reverseMap(P) :Array[B] 
	 同map,方向相反
flatMap(P) :Array[B] 
	 先map后降维,对当前序列的每一个元素操作,结果放到新序列返回
flatten:Array[T] 
	 扁平化,将二维数组变为一维数组
transpose:Array[Array[b]]   
	 矩阵转置,二维数组行列转换
unzip:(Array[T],Arrat[T])  
  	 将含有两个二元组的数组,每个元组的第一个元素组成一个数组,第二个元素组成一个数组,返回这两个数组的元组
unzip3:(Array[T],Array[T],Array[T])  
     将含有三个三元组的数组,每个元组的第一个元素组成一个数组,第二个元素组成一个数组,第三个元素组成一个数组,返回这三个数组的元组
zip(B)
     拉链操作,将两个序列对应位置上的元素组成一个元组数组,要求两个序列长度相同
zipAll(b,elem1,elem3) 
	  同zip,但是两个序列长度可以不同,当前序列短,同elem1代替,如果b短,用elem2填充
zipWithIndex:Array[(A,Int)] 
      将序列中每个元素和其索引组成一个数组

元素查询

head  
		返回序列第一个元素,
headOption 
		返回序列的第一个元素的Option类型对象(Option(第一个元素)),
last 
		返回序列最后一个元素
lastOption  
	    返回序列最后一个元素的Option类型对象(Option(第一个元素))
take(n:Int)  
		返回序列中前n个元素组成的序列
takeRight(n:Int) 
	    返回序列中从右边开始n个元素组成的序列(后n个)
takeWhile(B) 
		返回从第一个满足条件的连续的元素组成的序列(遇到第一个不满足则不在继续查找)
max  
	    返回序列中的最大元素
min 
		返回序列中的最小元素
maxBy(条件)  
		返回满足条件的第一个元素
minBy(条件)  
		返回不符合条件的第一个值
filter(偏函数);Array[T]  
	    找出满足条件的元素,组成新的集合并返回
fileterNot(偏函数):Array[T]   
		找出不满足的
withFilter(偏函数):FilterMonadic[T,Array[T]]  
		选出符合条件的元素,不返回集合,想要输出调用foreach
find(偏函数) :Option[T]   
		查找第一个符合条件的元素,返回Option

下标查询

apply(Index:Int):T  
		获取序列指定索引处元素 
applyOrElse(index,{x:Int=>default value})  
		根据下标取元素,如果越界,返回默认值,第二个参数为偏函数
charAt(index:Index)   
	    获取指定位置的字符,针对char类型 
indexOf(elem:T):Int   
		获取元素elem第一次出现的索引
indexOf(elem:T,start:Int) :Int  
		从指定位置start开始查找元素elem第一次出现的索引
indexOfSlice(List):Int     
		查找序列是否包含序列,并返回第一次出现该序列的索引,找不到但会-1 
indexOfSlice(List,start:Int):Int  
		从指定位置start开始查找是否存在序列list,返回第一个出现的索引,没有返回-1
indexWhere(条件) :Int  
		返回当前序列中第一个满足条件的元素的索引
indexWhere(条件,start:Int):Int  
		从指定位置开始查找满足条件的第一个元素的索引 
indices 
		返回当前序列的索引,返回的是Range
		 scala> arr01.indices
		 scala.collection.immutable.Range = Range 0 until 10
		 scala> aarr01.indices.toArray
         Array[Int] = Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
lastIndexOf(elem):Int   
		 返回元素最后一次出现的索引位置 
lastIndexOf(elem,end:Int) 
		在指定位置end之前(包括)查找第一次出现的该元素的索引   
lastIndexOfSlice(List)
		查找序列是否包含序列,并返回最后一次出现该序列的索引,找不到但会-1  
lastIndexOfSlice(List,end:Int)
		从指定位置end之前查找是否存在序列list,返回第一个出现的索引,没有返回-1
lastIndexWhere(条件/偏函数) :Int  
		返回当前序列满足条件的元素的最后一个索引
lastIndexWhere(条件/偏函数,end:Int) :Int   
		在指定位置end之前返回当前序列满足条件的元素的最后一个索引
slice(fromIndex:Int,untilIndex:Int)  
		 返回序列中从from到until之间的序列,不包括untilIndex位置
subSequence(fromIndex:Int,untilIndex:Int)  
		返回从from到until间的字符序列,不包括untilIndex位置 针对char类型
view(from:Int,until:Int):IndexedSeqView   
		索引序列返回当前序列从from开始到until之间的序列,不包括until  

长度查询

count(偏函数)  
	  统计满足条件的元素个数 
	  scala> a.count(x=>x%2==0)
	  res61: Int = 4  
length:Int 
	   返回数组元素个数
lengthCompare(len:Int):Int   
	   返回数组长度与指定长度的差值
prefixLength(B)
	   从第一个索引开始,返回满足条件B的元素数量,直到遇到不满足结束
segmentLength(p,fromIndex) :Int  
       返回一个从fromInedx开始满足条件p的元素数量
	   scala> a.segmentLength(x=>x>3,3)
	   res93: Int = 3
size:Int 
	   返回序列元素个数

方法作为参数

aggregate(初值)(方法1))(方法2)  
    	聚合计算,柯里化方法,参数是两个方法
arr.aggregate(初值)(mapCal)(reduceCal)                
		map端聚合,mapCal生效,reduceCal失效  
arr.partitionaggregate(初值)(mapCal(reduceCal)   
  		 par产生分区,mapCal->reduceCal
f1_ andThen f2_ 
   		f1 和 f2只有 一个参数,且类型相同先执行第一个函数,将第一个函数结果作为第二个函数的参数 
		①:val add=(x:Int)=>{x+10}                                                                   
	    ②:val mul=(x:Int)=>{x*11}                                                                   
        ③:def mat=add andThen mul
f1 compose  f2
        与andThen相反,先执行f2    	                                                                                                    
collet[First](fun):Array[B]
  	    通过执行一个并行计算(偏函数),得到一个新的数组对象   [First]返回新数组对象的第一个值
	    scala> a.collect({case i if(i%2==0)=>i}).foreach(println)
			4   32   2   6                                                                        
	    scala> a.collectFirst({case i if(i%2==0)=>i}).foreach(println)
			 4 
foreach(fun)   
	    遍历集合中的元素
iterator  
	     生成当前序列的迭代器
map(F)        
 	     对集合的元素进行F操作,返回生成的新的集合   
runwith(F)   
	     以第二个参数作为下标提取元素,作为第一个函数的入口, 	
	     ①:下标存在,且满足函数规则,返回true,                                                       
	     ②:下标存在,但是不满足函数,报异常,                                                       
	     ③:下标不存在返回false
	     scala> a.runWith(x=>x match{case x if(x%2==0)=>x})(8)
	     res54: Boolean = true  (8)代表集合下标

分组排序

groupBy(F):Map[k.Array[T]]
  	   按指定的F条件分组,返回Map,一个k对应一个Array
grouped(size:Int) :lterator[Array[T]]
  	   按指定数量分组,每组size个元素,返回迭代器
par  mutable.ParArray[Int]   
   	   返回一个并行实现,产生的并行序列不能被修改 ,作用相当于hashcode分区 
	   scala> a.par
       res37: scala.collection.parallel.mutable.ParArray[Int] = ParArray(4, 9, 7, 32, 7, 5, 3, 1, 2, 6)
partition(p)   :Array(Array[T],Array[T])
       将满足条件P 的元素放在第一个数组,不满足放在第二个,返回的是包含这两个数组的元组  
span(P):(Array[T],Array[T])  
 	   将序列拆分成两个数组,从第一个位置开始,满足条件P就放到第一个数组,直到遇到第一个不满足条件的为止,后面所有的都放到第二个,返回的是元组
splitAt(Index:Int) :(Array[T],Array[t])
 	   从指定位置处将序列分成两个数组,index之前放入第一个,index处以及其余放第二个
sliding(size:Int);Iterator[Array[T]]:Iterator  
	   从第一个元素开始,每个元素和他后面的元素组成一个size长度的新数组,当剩余的元素个数不够size是结束
sliding(size:Int,step:Int):Iterator
	   第一个元素同上,第二次匹配时从上一次第一个元素后step个开始取元素
	   scala> var b = Array(1, 2, 3, 4, 5, 6, 7)
	   scala> b.sliding(2,3).toArray
  	   res71: Array[Array[Int]] = Array(Array(1, 2), Array(4, 5), Array(7))
sorted;Array[T]   
	    使用默认的规则对序列进行排序,默认为升序
sortBy(规则) :Array[T] 
	    按指定的排序规则对序列排序
sortWith(_compareTo_):Array[T]  
	    自定义排序方法

条件判断

contains[T]  :Boolean 
       判断集合中是否包含指定元素T      
containsSlice(Array) :Boolean  
       判断集合中是包含一个集合,对应下标下的元素是否相同,有一个不同就为false    
canEqual(that:Any) :Boolean 
	   判断两个集合是否可以进行比较,集合都可以比较
corresponds(B):Boolean  
       判断两个集合的长度以及对应位置元素是否符合条件
endsWith(Array)
       判断集合是否以集合Array结尾,有一个不满足就为false     
       a = Array(4, 9, 7, 32, 7, 5, 3, 1, 2, 6) 
	   scala> a.endsWith(Array(3,2,6))
       res64: Boolean = false
sameElements(b):Boolean 
		判断两个序列长以及对应索引的元素是否相同
startsWith(Array)
        判断集合是否以集合Array开头,有一个不满足就为false    
exists(偏函数):Boolean 
        判断集合是否包含符合偏函数的元素,只要存在就为true,        
forall(偏函数):Boolean   
        判断集合是否全都满足偏函数(条件),有一个不满足就为false,序列为空也是true     
hasDefiniteSize 
        判断序列是否存在有限长度,对应Stream这样的流数据,返回false      :Boolean
isDefindAt(index:Int):Boolean
        判断序列是否存在指定索        
isEmpty:Boolean
        判断序列是否为空   
nonEmpty:Boolean
        判断是否不为空         
isTraversableAgain:Boolean
        判断是否可以反复遍历。迭代器只能遍历一次         

字符串相关

addString

addString(b:StringBuffer):StringBuilderr
          将数组中的元素逐个添加到StringBuilder中,返回StringBuilder
		  scala> var b=new StringBuilder
          c: StringBuilder =                                      
          scala> a.addString(b,"-")
          res26: StringBuilder = 49732753126
addSring(b,seq)将数组中的元素逐个添加到StringBuilder中,并用seq分隔符分开,
		  scala> var c=new StringBuilder
          c: StringBuilder =                                      
          scala> a.addString(c,"-")
          res26: StringBuilder = 4-9-7-32-7-5-3-1-2-6
addString(b,start,seq,end)
          将集合中的元素放到StringBuilder中,在首位各添加一个分隔符,并指定中间的分隔符

mkString

A.mkSting:String
           将集合中所有元素拼接成一个字符串
mkString(seq)
           将集合中的元素用分隔符seq拼接为字符串 
mkString(start,seq,end) 
           在首尾添加分隔符,以seq分隔符连接生成字符串
stringPrefix  
			返回toString结果的前缀
			scala> a.toString
       		res31: String = [I@7780a93c
			scala> a.stringPrefix
        	res32: String = [I

对集合指定计算

/:  (初值/:a)(_运算符_):Int
    指定一个初值,从左开始,对数组进行指定的运算符计算        
:\  (a:\初值)(_运算符_):Int
     指定一个初值,从右开始对数组进行指定运算符计算      
fold(初值)(_运算符_):Int  
     同/:
foldLeft(初值)(_运算符_) :Int  
	 同fold
foldRight(初值)(_运算符_):Int  
     同:\ 从右计算
product
   	 返回所有元素的乘积          
reduce(_运算符_) :T   
     从左计算,不需要初始值
reduceLeft(_运算符_):T
     从左开始计算  不需要初始值                
reduceLeftOption(_运算符_):Option
     同reduceLeft,返回Option          
reduceOption(_运算符_):Option  
     同redeceLeftOption                    
reduceRight(_运算符_):T
     从右开始计算,不需要初始值 ,         
reduceRigthOption(_运算符_):Option
     从右计算,  返回Option  
scan(初值)(_运算符_):Array[T]
     同fold,从左开始计算,但是scan会把每一步计算的结果放在一个新的集合中并返回, 集合第一个元素为初值
scanLeft(初值)(_运算符_):Array[T]
     同foldLeft 从左计算,返回每一步得到的记过组成的新的集合。                        
scanRight(初值)(_运算符_):Array[T]
     同foldRight ,从右开始u计算,返回每一步结果组成的新的集合         
sum:Int 
      集合求和,元素类型为Numeic[T]类型                 

类型转换

 toBuffer
 toIndexedSeq
 toIterator
 toIterable
 toList
 toMap
 toSeq
 toStream
 toVector
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值