用于添加和移除元素的操作符
-
操作符:
coll:+elem
或elem+:coll
-
集合类型:
Seq
var coll = List(1,2,3) val elem = 4 print(coll:+elem) //运行结果 List(1, 2, 3, 4)
- 1
- 2
- 3
- 4
- 5
-
操作符:
coll+elem
或coll+(e1,e2,...)
-
集合类型:
Set
&Map
var 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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
-
操作符:
coll-elem
|coll-(e1,e2,...)
-
集合类型:
Set
&Map
&ArrayList
var 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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
-
操作符:
coll++coll2
|coll2++:coll
-
集合类型:
Iterable
var coll = Set(1, 3, 5) var coll2 = Set(2, 4, 6) println(coll ++ coll2) //运行结果 Set(5, 1, 6, 2, 3, 4)
- 1
- 2
- 3
- 4
- 5
-
操作符:
coll -- coll2
-
集合类型:
Set & Map & ArrayBuffer
var 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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
-
操作符:
elem:lst | lst2:::lst
-
集合类型:
List
var 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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
-
操作符
set|set2
|set&set2
|set&~set2
-
描述:并集、交集和两个集的差异,|等同于++,&~等同于–
-
集合类型
Set
var 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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-
操作符:
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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
-
操作符:
elem +=: coll
|coll2 ++=: coll
-
描述:通过向前追加给定元素或集合来修改
coll
-
集合类型:
ArrayList
var 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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
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))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
-
方法:
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)
- 1
- 2
- 3
- 4
- 5
- 6
-
方法:
size
&isEmpty
-
描述:返回集合长度;或者,当前长度为零时返回True
var coll = Set(1, 3, 5, 2) println("size:"+coll.size) println("isEmpty:"+coll.isEmpty) //运算结果 length:4 isEmpty:false
- 1
- 2
- 3
- 4
- 5
- 6
-
方法:
map(f)
|foreach(f)
|flatMap(f)
|collect(pf)
-
描述:将函数应用到所有元素
- 1
-
方法:
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
-
方法:
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
-
方法:
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))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
-
方法:
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))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
-
方法:
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))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
-
方法:
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)
- 1
- 2
- 3
- 4
- 5
- 6
-
方法:
slice(from, to)
-
描述:返回位于从from开始到to结束这个区间内的所以元素
var coll = Set(1, 2, 3, 4) println("slice:"+coll.slice(0,2)) //返回结果 slice:Set(1, 2)
- 1
- 2
- 3
- 4
-
方法:
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))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
-
方法:
grouped(n)、sliding(n)
-
描述:返回长度为n的子集合迭代器grouped产出下标为0 until n的元素,然后是下标为n until 2*n的元素,以此类推;silding产出的下标为0 until n的元素,然后是下标为1 until n+1的元素,以此类推
- 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>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
-
方法:
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
-
方法:
indexWhere(pred)
-
描述:满足返回
pred
的首个元素下标
val list = List(1,3,4,23,4,5,6,7,8,1,23)
println(list.indexWhere(_>20))
结果
3
- 1
- 2
- 3
- 4
-
方法:
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
- 1
- 2
- 3
- 4
- 5
- 6
-
方法: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)
- 1
- 2
- 3
- 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)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
-
方法:
reverse
-
描述:当前序列的反向
val list = List(1,3,4,23,4,5)
println(list.reverse)
结果
List(5, 4, 23, 4, 3, 1)
- 1
- 2
- 3
- 4
-
方法: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)
}