Scala中的集合操作
scala 官方文档:https://docs.scala-lang.org/tour/basics.html
1.数组
创建数组:
数组的遍历:
二维数组:
2.List
// 创建list 并初始化数据
var list = List(1,2,3)
// 在list首部,添加一个元素,并返回一个新集合
var list2 = list.+:(4) // List(4, 1, 2, 3)
// 同上
var list3 = list.::(5) //List(5, 1, 2, 3)
// 添加一个集合,返回一个新的集合,(合并)
var list4 = list.:::(List(4,5)) // List(4, 5, 1, 2, 3)
// 获取指定下坐标下的值 或者list apply 0 或者 list(index)
var a = list.apply(0) // 1
// 返回 除了第 n个 元素之前 的 集合
var list5 = list.drop(2) //List(3)
// 修改指定位置并返回一个新集合(index,newValue)
var list6 = list.updated(1,10)
// count 统计计算符合条件的元素的个数
var sum = list.count(_%2==0) // 1 就一个2
// filter 过滤 元素-1 后的值大于0,返回一个集合
println(list)
var list7 = list.filter(_-1>0) // List(2,3)
// map 遍历元素,并操作 根据操作得到的值 返回值类型
var list8 = list.map(_+10+"得到的值") //List(11得到的值, 12得到的值, 13得到的值)
println(list8)
// 循环遍历
list.foreach(s => print(s + " "))
for (i <- 0 until list.size) {
println(list(i))
}
for (elem <- list) {
println(elem)
}
// flatmap 扁平化 遍历操作
val list9 = List(
"hello world",
"hello xiaodu",
"good !!"
)
val aa = list9.flatMap{s => s.split(" ")} //aa = List(hello, world, hello, xiaodu, good, !!)
println("aa = " + aa)
3. set
// set 中的元素不可重复,无序的
val set = Set(1,2,3)
val set1 = Set(3,4,5)
val set2 = Set(1,2)
println(set.+(1)) // Set(1, 2, 3); 添加一个元素,会自动去重
println(set.+(3,4,5,6,7,8,9,0)) // 添加多个
// 交集
println(set.intersect(set1)) //Set(3)
// 差集
println(set.diff(set1)) // Set(1, 2);set 对于set1 的差集
// 子集 包含关系
println(set2.subsetOf(set)) // set2 是否是set 的子集,返货boolean
//
println(set.max) // 最大
println(set.min) // 最小
// 转换为 数组
val arr = set.toArray
// 转换为list
val list = set.toList
// mkstring, 把元素都转换为string ,并以一定的格式拼接
println(set.mkString("@"))
// 遍历
set.foreach(println)
for (elem <- set) {
println(elem)
}
set.map(s => println(s))
Map 操作
/创建
val map = Map(
("a",1),
"b" -> 2,
("c",3)
)
// map 操作
println(map.get("a").get) // 通过key获取value
println(map.get("a").getOrElse("not value")) //进行非空判断,空的时候返回not value
// 遍历
for (elem <- map) {
print("key : " + elem._1+ " ") // 获取key
println("value : " +elem._2 +" ") // 获取value
}
// 获取所有key
println("keys = " + map.keys)
// 获取所有value
println("values = " + map.values)
// 通过keys遍历 获取value
for (elem <- map.keys) {
println(map.get(elem).getOrElse("not value"))
}
// 迭代器遍历
var iter = map.iterator
while(iter.hasNext) {
var next = iter.next()
println("key : " + next._1 +" = value : "+next._2)
}
// map 合并
var map2 = Map(
("d",4),
"e" -> 5
)
map.++(map2).foreach(println) // map2添加到头(push)
// 过滤 key== a
map.filter(_._1.equals("a")).foreach(println) //(a,1)
// count 统计
var count = map.count(_._2>2)
println("value > 2 的数量:" + count)
// exit 返回Boolean
println(map.exists(_._1=="a"))
元组 :tuple
// 创建 最多支持22个 可以支持任意类型
var tup1 = Tuple1(1)
// 相当于map
var tuple2 = Tuple2(("a",1),("b",2))
var tuple3 = new Tuple3(1,2,3)
// ...
var tuple22 = Tuple22(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22)
// 取值
println(tuple3._3)
println(tuple2._1._1)
// 遍历
var iter = tuple3.productIterator
while (iter.hasNext) {
println( "tuple3中value = " + iter.next())
}
var iter2 = tuple2.productIterator
while (iter2.hasNext) {
println(iter2.next())
}
// swap 顺序反转, tuple2才能使用
println(tuple2.swap)