用于添加和移除元素的操作符
-
操作符:
coll:+elem或elem+:coll -
集合类型:
Seqvar coll = List(1,2,3) val elem = 4 print(coll:+elem) //运行结果 List(1, 2, 3, 4) -
操作符:
coll+elem或coll+(e1,e2,...) -
集合类型:
Set&Mapvar coll1 = Set(1, 3, 5) var elem1 = 2 println(coll1+elem1) //运行结果 Set(1, 3, 5, 2) var coll2 = Map("A"->1, "B"->2) var elem2 = ("C",3)//等同于("C"->3) println(coll2+elem2) //运行结果 Map(A -> 1, B -> 2, C -> 3) -
操作符:
coll-elem|coll-(e1,e2,...) -
集合类型:
Set&Map&ArrayListvar coll1 = Set(1, 3, 5) var elem1 = 3 println(coll1-elem1) //运行结果 Set(1, 5) var coll2 = Map("A"->1, "B"->2) var elem2 = "B" println(coll2-elem2) //运行结果 Map(A -> 1) -
操作符:
coll++coll2|coll2++:coll -
集合类型:
Iterablevar coll = Set(1, 3, 5) var coll2 = Set(2, 4, 6) println(coll ++ coll2) //运行结果 Set(5, 1, 6, 2, 3, 4) -
操作符:
coll -- coll2 -
集合类型:
Set & Map & ArrayBuffervar coll = Set(1, 3, 5, 2, 4, 6) var coll2 = Set(2, 4, 6) println(coll -- coll2) //运行结果 Set(5, 1, 3) var coll = Map("A"->1, "B"->2, "C"->3) var coll2 = List("A", "B") println(coll -- coll2) //运行结果 Map(C -> 3) -
操作符:
elem:lst | lst2:::lst -
集合类型:
Listvar elem = List(1,2,3) var lst = List(4,5) println(elem :: lst) //运行结果 List(List(1, 2, 3), 4, 5) var elem = List(1,2,3) var lst = List(4,5) println(elem ::: lst) //运行结果 List(1, 2, 3, 4, 5) -
操作符
set|set2|set&set2|set&~set2 -
描述:并集、交集和两个集的差异,|等同于++,&~等同于–
-
集合类型
Setvar coll = Set(1, 3, 5, 2) var coll2 = Set(2, 4, 6) println(coll | coll2) println(coll & coll2) println(coll &~ coll2) //运行结果 Set(5, 1, 6, 2, 3, 4) Set(2) Set(1, 3, 5) -
操作符:
coll +=elem|coll += (e1,e2,...)|coll ++= coll2|coll -= elem|coll -= (e1,e2,...)|coll --=coll2 -
描述:通过添加或一出给定元素来修改
coll -
集合类型:可变集合
var coll = Set(1, 3, 5, 2) var elem = 7 var coll2 = Set(2, 4, 6) coll += elem println(coll) coll ++= coll2 println(coll) coll --= coll2 println(coll) //运行结果 Set(5, 1, 2, 7, 3) Set(5, 1, 6, 2, 7, 3, 4) Set(5, 1, 7, 3) -
操作符:
elem +=: coll|coll2 ++=: coll -
描述:通过向前追加给定元素或集合来修改
coll -
集合类型:
ArrayListvar coll = ArrayBuffer("you", "Tom") var elem = "are" var coll2 = ArrayBuffer("How") elem +=: coll println(coll) coll2 ++=: coll println(coll) //运行结果 ArrayBuffer(are, you, Tom) ArrayBuffer(How, are, you, Tom)
Iterable 特质的重要方法
-
方法:
head&last&headOption&lastOption -
描述:返回第一或最后一个元素;或者以Option返回
var coll = Map("A"->1, "B"->2, "C"->3) println("head:"+coll.head) println("last"+coll.last) println("headOption"+coll.headOption) println("lastOption"+coll.lastOption) //运行结果 head:(A,1) last(C,3) headOptionSome((A,1)) lastOptionSome((C,3)) -
方法:
tail&isEmpty -
描述:返回除第一个或最后一个元素外其余的部分
var coll = Map("A"->1, "B"->2, "C"->3) println("tail:"+coll.tail) println("init:"+coll.init) //运行结果 tail:Map(B -> 2, C -> 3) init:Map(A -> 1, B -> 2) -
方法:
size&isEmpty -
描述:返回集合长度;或者,当前长度为零时返回True
var coll = Set(1, 3, 5, 2) println("size:"+coll.size) println("isEmpty:"+coll.isEmpty) //运算结果 length:4 isEmpty:false -
方法:
map(f)|foreach(f)|flatMap(f)|collect(pf) -
描述:将函数应用到所有元素
-
方法:
sum|product|max|min -
描述:和,乘积,最大值,最小值
var coll = Set(1, 3, 5, 2) println("sum:"+coll.sum) println("product:"+coll.product) println("max:"+coll.max) println("min:"+coll.min) //运行结果 sum:11 product:30 max:5 min:1 -
方法:
count(pred)|forall(pred)|exists(pred) -
描述:返回满足时提前表达式的元素计数,所有元素满足时返回true,至少一个元素满足是返回true
var coll = Set(1, 3, 5, 2) println("count:"+coll.count(_>3)) println("forall:"+coll.forall(_>3)) println("exists:"+coll.exists(_>3)) //运行结果 count:1 forall:false exists:true -
方法:
filter(pred)|filterNot(pred)|partition(pred) -
描述:返回所有满足前提表达式的元素,所有不满足的元素,两组元素组成的对偶
var coll = Set(1, 3, 5, 2) println("filter:"+coll.filter(_>3)) println("filterNot:"+coll.filterNot(_>3)) println("exists:"+coll.partition(_>3)) //运行结果 filter:Set(5) filterNot:Set(1, 3, 2) exists:(Set(5),Set(1, 3, 2)) -
方法:
takeWhile(pred)|dropWhile(pred)|span(pred) -
描述:返回满足前提表达式的一组元素,所有其他元素,两组元素的对偶
var coll = Set(1, 2, 3, 4) println("takeWhile:"+coll.takeWhile(_<3)) println("dropWhile:"+coll.dropWhile(_<2)) println("span:"+coll.span(_<2)) //运行结果 takeWhile:Set(1, 2) dropWhile:Set(2, 3, 4) span:(Set(1),Set(2, 3, 4)) -
方法:
take(n)|drop(n)|splitAt() -
描述:返回前n个元素,其他元素,两组对偶
var coll = Set(1, 2, 3, 4) println("take:"+coll.take(2)) println("drop:"+coll.drop(2)) println("splitAt:"+coll.splitAt(2)) //运行结果 take:Set(1, 2) drop:Set(3, 4) splitAt:(Set(1, 2),Set(3, 4)) -
方法:
takeRight(n)|dropRight(n) -
描述:返回最后n个元素,其他元素
var coll = Set(1, 2, 3, 4) println("takeRight:"+coll.takeRight(2)) println("dropRight:"+coll.dropRight(2)) //运行结果 takeRight:Set(3, 4) dropRight:Set(1, 2) -
方法:
slice(from, to) -
描述:返回位于从from开始到to结束这个区间内的所以元素
var coll = Set(1, 2, 3, 4) println("slice:"+coll.slice(0,2)) //返回结果 slice:Set(1, 2) -
方法:
zip(coll2)|zipAll(coll2,fill,fill2)|zipWithIndex -
描述:返回由本集合元素和另外一个集合的元素组成的对偶
var coll = List("a", "b", "c") var coll2 = List(1, 2, 3) var coll3 = List("a", "b", "c") var coll4 = List(1, 2) var coll5 = List("a", "b", "c", "d") println(coll.zip(coll2)) println(coll3.zipAll(coll4, "a", 0)) println(coll5.zipWithIndex) //运行结果 List((a,1), (b,2), (c,3)) List((a,1), (b,2), (c,0)) List((a,0), (b,1), (c,2), (d,3)) -
方法:
grouped(n)、sliding(n) -
描述:返回长度为n的子集合迭代器grouped产出下标为0 until n的元素,然后是下标为n until 2*n的元素,以此类推;silding产出的下标为0 until n的元素,然后是下标为1 until n+1的元素,以此类推
-
方法:
mkString(before,between,after)、addString(sb, before, between, after) -
描述:做出一个由所有元素组成的字符串,将给定字符串分别添加到首个元素之前,每个元素之间,以及最后一个元素之后。第二个方法将该字符串追加到字符串构造器当中
var coll = List("a", "b", "c") println(coll.mkString("<","-",">")) var coll2 = new StringBuilder() coll2.append("d","e") println(coll.addString(coll2, "<", "-", ">")) //运行结果 <a-b-c> (d,e)<a-b-c>
Seq特质的重要方法
-
方法:
contains(elem)、containsSlice(seq)、startsWith(seq)、endsWith(seq) -
描述:返回true,如果该序列:包含给元素;包含给定序列;以给定序列开始;或者,以给定序列结束
val list = List(1,23,4)
val list2 = List(1,23)
val list3 = List(23,4)
println(list.contains(2))
println(list.containsSlice(list2))
println(list.startsWith(list2))
println(list.endsWith(list3))
结果
false
true
true
true
-
方法:
indexOf(elem)、lastIndexOf(elem)、indexOfSlice(seq)、lastIndexOfSlice(seq) -
描述:返回给定元素或序列在当前序列中的首次或末次出现的下标
val list = List(1,23,4,5,6,7,8,1,23)
val list2 = List(1,23)
println(list.indexOf(23))
println(list.lastIndexOf(23))
println(list.indexOfSlice(list2))
println(list.lastIndexOfSlice(list2))
结果
1
8
0
7
-
方法:
indexWhere(pred) -
描述:满足返回
pred的首个元素下标
val list = List(1,3,4,23,4,5,6,7,8,1,23)
println(list.indexWhere(_>20))
结果
3
-
方法:
prefixLength(pred)、segmentLenght(pred,n) -
描述:返回满足pred的最长元素序列的长度,从当前序列的下标0或n开始查找
val list = List(1,3,4,23,4,5,6,7,8,23)
println(list.prefixLength(_>4))
println(list.segmentLength(_>3,2))
结果
0
8
-
方法:padTo(n,fill)
-
描述:返回当前序列的一个拷贝,将fill的内容向后追加,直到新序列长度达到n
val list2 = List(8,9)
val list = List(1,3,4,23,4,5)
println(list.padTo(5,list2))
结果
List(1, 3, 4, 23, 4, 5)
-
方法:
intersect(seq)、diff(seq) -
描述:返回“多重集合”的交集,或序列之间的差异。
val list2 = List(8,1,23,9)
val list = List(1,3,4,23,4,5)
println(list.intersect(list2))
println(list.diff(list2))
结果
List(1, 23)
List(3, 4, 4, 5)
-
方法:
reverse -
描述:当前序列的反向
val list = List(1,3,4,23,4,5)
println(list.reverse)
结果
List(5, 4, 23, 4, 3, 1)
-
方法:permutations、combinations(n)
-
描述:返回一个遍历所有排列或组合(长度为n的子序列)的迭代器
val list2 = List(8, 1, 23, 9)
val list = List(1, 3, 4, 23, 4, 5)
for (elem <- list.permutations) {
print(elem)
}
println()
for (elem <- list.combinations(3)) {
print(elem)
}
本文深入探讨Scala中集合操作符及特质的重要方法,包括添加、移除元素,集合运算,以及Iterable和Seq特质的方法,如map、filter、reduce等,帮助读者掌握Scala集合高效操作技巧。

962

被折叠的 条评论
为什么被折叠?



