scala集合操作(2)

来源:互联网 发布:q动态头像软件 编辑:程序博客网 时间:2024/06/05 14:42
       **承接集合操作(1),今天给大家继续分享下面内容:**

11.groupBy, grouped
(1)groupBy根据某个元素分组

例如:
val data = List(("HomeWay","Male"),("XSDYM","Femail"),("Mr.Wang","Male"))
val group1 = data.groupBy(_._2)
print(group1)

//其输出结果为一个map
Map(Male -> List((HomeWay,Male), (Mr.Wang,Male)), Femail -> List((XSDYM,Femail), (frank,Femail), (andy,Femail)))

(2)grouped根据所给Int型参数,规定每组几个元素

比如
val data = List(("HomeWay","Male"),("XSDYM","Femail"),("Mr.Wang","Male"),("frank","Femail"),("andy","Femail"))
val group2=data.grouped(2).toList
print(group2)

结果为List( List((HomeWay,Male), (XSDYM,Femail)), List((Mr.Wang,Male), (frank,Femail)) , List((andy,Femail)))

12.scan
由初始值开始,从左到右,进行积累的操作
val nums=List(1,2,3,4)
val result=nums.scan(1)(_+_)
print(result)

结果为List(1, 2, 4, 7, 11)

13.take,takeRight,takeWhile
take即提取前几个元素
takeRight即从右边开始提取n个元素
takeWhile从左往右提取知道条件p不成立为止
` val nums = List(1,1,1,1,4,4,4,4)

val left = nums.take(4) // List(1,1,1,1)

val right = nums.takeRight(4) // List(4,4,4,4)

val headNums = nums.takeWhile( _ == nums.head) // List(1,1,1,1)`

14.drop,dropRight,dropWhile
与take相似即丢弃操作

大家来看例子吧
val nums = List(1,1,1,1,4,4,4,4)
val left = nums.drop(4) // List(4,4,4,4)
val right = nums.dropRight(4) // List(1,1,1,1)
val tailNums = nums.dropWhile( _ == nums.head) // List(4,4,4,4)

15.span,splitAt,partition
这几个操作都是针对如何将表一分为二的,

(1)span从左到右应用条件p进行判断,知道条件不成立,此时将列表一分为二

val nums = List(1,1,1,2,3,2,1)
val (prefix,suffix) =nums.span( _ == 1)
print(prefix)
print(suffix)

其结果为

List(1, 1, 1) List(2, 3, 2, 1)

(2)splitAt将列表从第n个一分为二

val (prefix,suffix) = nums.splitAt(3) // prefix = List(1,1,1), suffix = List(2,3,2,1)

(3)partition根据条件选择元素,将满足条件的放到一方,不满足的放到另一方

val (prefix,suffix) = nums.partition( _ == 1)prefix = List(1,1,1,1), suffix = List(2,3,2)

16.padTo
将列表扩展到指定长度,其空缺元素用参数补充
val nums = List(1,1,1)
val padded = nums.padTo(6,2)
// List(1,1,1,2,2,2)

17.combinations,permutations
(1)combinations即列表中的n个元素进行组合,再挑选出不重复的列表

val nums = List(1,3,1)
val combinations = nums.combinations(2).toList
print(combinations)
//List(List(1, 1), List(1, 3))

(2)permutations对列表中的元素进行排序,返回不重的排列列表
val permutations = nums.permutations.toList
print(permutations)

//List(List(1, 1, 3), List(1, 3, 1), List(3, 1, 1))

18.zip,zipAll,zipWithIndex,unzip,unzip3
为两个列表的操作,将对应的位置元素组成一个pair,返回列表长度为两个列表中短的那个
val alphabet = List("A",B","C")
val nums = List(1,2)
val zipped = alphabet zip nums
print(zipped)
//List((A,1), (B,2))

(2)zipAll为根据最长的列表匹配,空缺值根据相对应的参数补全
val zippedAll = alphabet.zipAll(nums,"*",-1)// List(("A",1),("B",2),("C",-1))
val zippedAll = alphabet.zipAll(nums,-1,"*")
//List((A,1), (B,2), (C,*))

(3)zipWithIndex为将列表元素与序列拼配组成一个pair
val zippedIndex = alphabet.zipWithIndex
println(zippedIndex)
//List((A,0), (B,1), (C,2))

(4)unzip解链如
val (list1,list2) = zipped.unzip
println(list1)
println(list2)
//List(A, B) List(1, 2)

(5)unzip3为处理元组元素为三个的集合
val (l1,l2,l3) = List((1, "one", '1'),(2, "two", '2'),(3, "three", '3')).unzip3
//l1=List(1,2,3),l2=List(“one”,”two”,”three”),l3=List(‘1’,’2’,’3’)

19.slice
提取列表中从from到util(不包含该位置)的元素列表
val nums = List(1,2,3,4,5)
val sliced = nums.slice(2,4)
//List(3,4)

20.sliding
将列表按照固定大小步长进行分组,结果返回一个迭代器
val nums = List(1,1,2,2,3,3,4,4)
val groupStep2 = nums.sliding(2,2).toList //List(List(1,1),List(2,2),List(3,3),List(4,4))
val groupStep1 = nums.sliding(2).toList
//这里默认值为步长为一List(List(1,1),List(1,2),List(2,2),List(2,3),List(3,3),List(3,4),List(4,4))

21.update

将列表中的某个元素进行跟新操作
val nums = List(1,2,3,3)
val fixed = nums.updated(3,4)
// List(1,2,3,4)