前言
上一章对scala对象进行了一个初步的了解,这一章将对scala集合进行一个入门,同样这一章将会把没一个知识点和python做对比,所以这一系列文章更适合的是学习scala的python程序员。
定长数组
新建数组方式一
val array1 = new Array[String](5)
新建数组方式二
val array2 = Array("one","two","three")
数组的赋值和取值
这点和python 类似,只不过python用的中括号,这个用的小括号。
同样如果取索引为3的值,因为这个索引没有值。scala会抛出数组下标越界的异常。
数据的简单操作
数组长度
val a = Array(1,2,3,4,5,6)
a.length
数组求和 sum
数组取最大最小值 min,max
数组转字符串 mkString 类似于 python的join方法
变长数组(可变数组)
新建可变数组的方式
val a = scala.collection.mutable.ArrayBuffer[Int]()
新增数据
新增数据整体来说,比较简洁优雅
删除数据
删除函数用的是remove方法
可以remove(0) 删除索引为0的数据
可以remove(4,1) 从索引为4的元素开始(包含)删除一个数据,那就是索引4数据本身。如果是remove(4,2) 则是删除原索引为4和为5的元素。
同样可以指定从数组头部删除数据或者尾部删除数据 trimEnd(头部删),trimStart(尾部删)
转换为定长数组
a.toArray
数组转置
定长列表(list)
新建一个列表
和python 类似没有太多复杂的定义
val l = List(1,2,3,4,5)
列表的头部跟尾部
头部是列表的第一个值,如果列表里的值是数字,那么head就是Int类型。
tail尾部则是除了第一个值外其他的值的list集合。
因为有这种特殊的操作所以列表可以采用另一种新建的方式
两个冒号之前的是列表的头,后面的则是列表的尾部
我们来试一下更自由一些的操作
这个Nil是scala 提供的空列表,并且这个列表是不可变的就是作为空来使用的
变长列表(list)
变长列表的新建
val l2 = scala.collection.mutable.ListBufferInt
列表元素的增加还删除
和数组的操作类似,有趣的是列表支持 -= 操作,就是减去列表中的指定值。这里面减去的并不是索引,而是具体的值。并且如果将要减去的值并不在列表中,也不会报错。这点还是比较友好的。
变长列表的转换
转换为定长列表
l2.toList
转换为定长数组
l2.toArray
Set
和python的集合类似,scala 的 Set 同样也是一个无序不重复的集合,同样也分为定长和变长
定长的新建方式
val s = Set(1,2,3,4,3,4)
变长
val s1 = scala.collection.mutable.Set[Int]()
同样集合也支持这些灵活的加减操作。
总结
在scala中数组型结构的创建明显比python要复杂了,无论是数组还列表亦或是集合。scala都把他们分为可变和不可变类型。不可变类型类似于python中的元组,但是可变类型的操作增删便捷性还较为良好。