标签:取出 ++ ali app 扩展 递归 value 表示 区别
作者介绍:EVETNT,狐小E资深开发工程师,专注移动协同办公平台的SAAS软件开发以及轻应用开发
最近开发了一款移动办公软件狐小E
1. Scala集合
Scala提供了一套很好的集合实现,提供了一些集合类型的抽象。
Scala 集合分为可变的和不可变的集合。
可变集合可以在适当的地方被更新或扩展。这意味着随时可以修改,添加,移除一个集合的元素。
而不可变集合类永远不会改变。但是,你仍然可以模拟添加,移除或更新操作。但这些操作将在每一种情况下都返回一个新的集合,同时使原来的集合不发生改变。
2. 数组Array
Scala语言中提供的数组是一种可变的、可索引的数据集合。在Scala中用Array[T]的形式来表示
定常数组:
main方法
object ArrayApp {
def main(args: Array[String]): Unit = {
println("test")
}
}
scala简写
object ArrayApp extends App{
println("test")
}
创建数组:
object ArrayApp extends App{
val a = new Array[String](5)
println(a.mkString(","))
}
输出如下
a.length=取得是数组长度
println(a.length)
输出
5
a(0) = "hello" //给数组里的 第0位 赋值
另一种创建数组方式
val b =Array("A","B","C")
数组计算函数
val c =Array(1,2,3,4,5,6,7,8,9)
val c1 =c.sum
val c2 =c.min
val c3 =c.max
println(c1,c2,c3)
输出如下
(45,1,9)
mkString 的使用方法
println(c.mkString("<",",",">"))
输出
<1,2,3,4,5,6,7,8,9>
变长数组
val a = scala.collection.mutable.ArrayBuffer[Int]()
//累加赋值的几种方法
a += 1
a += 2
a += (3,4,5)
a ++= Array(6,7,8)
a.insert(0,0)
//消减赋值的几种方法
a.remove(1) //删除数组位置1的数据
a.remove(0,3) //删除数组位置从0开始前三位的数据
a.trimEnd(2) //删除数组位置后2位的数据
println(a)
输出
ArrayBuffer(0, 1, 2, 3, 4, 5, 6, 7, 8)
ArrayBuffer是可变数组,通过toArray转换成不可变数组
a.toArray
println(a.toArray.mkString(","))
输出
456
遍历数组的三种方法
1
for(i <- 0 until a.length ) {
println(a(i))
}
2
for(ele <- a){
println(ele)
}
3
for(i <- (0 until a.length).reverse {
println(a(i))
}
3. List
Scala 列表类似于数组,它们所有元素的类型都相同,但是它们也有所不同:列表是不可变的,值一旦被定义了就不能改变,其次列表 具有递归的结构(也就是链接表结构)而数组不是。列表的元素类型 T 可以写成 List[T]。
Nil:表示为一个空列表,而且是一个不可变的列表
list的组成:head,tail
list = head(Element) +tail(Element),除了头部以外的元素都是尾
object ListApp extends App{
val l =List(1,2,3,4,5,4,3,2,1)
println(l.head)
println(l.tail)
println(l.mkString(","))
}
输出如下
1
List(2, 3, 4, 5, 4, 3, 2, 1)
1,2,3,4,5,4,3,2,1
l5.taul.head的用法
val l5 =Lis (1,2,3,4,5)
println(l5.tail)
println(l5.tail.head)
输出
ListBuffer(2, 3, 4, 5)
2
常用示例:
def sum(nums:Int*):Int={
if(nums.length ==0){
0
} else{
nums.head +sum(nums.tail:_*)
}
}
println(sum())
println(sum(1,2,3,4))
输出
0
10
构造列表另一基本单位”::”的作用
(::)符号起到链接的作用,连接顺序是从右到左
val l1 = 1 :: Nil
val l2 = 2 :: l1
val l3= 1 :: 2 :: 3 :: Nil
println(l1)
println(l2)
println(l3)
输出如下
List(1)
List(2, 1)
List(1, 2, 3)
变量列表
val l5 =scala.collection.mutable.ListBuffer[Int]()
//累加赋值的几种方法
l5 += 2
l5 += (3,4,5)
l5 ++=List(6,7,8,9)
//消减赋值的几种方法
l5 -= 2 //删除列表里数字2数据
l5 -=(1,4) //删除列表里数字1和4数据
l5 --=List(5,6,7,8) //删除列表里数字5,6,7,8数据
println(l5)
ListBuffer是可变列表,通过toList 转换成不可变列表,也可以通过toArray转换成不可变数组
//
l5.toList
输出:
List(3, 9)
l5.toArray
输出
Array(3, 9)
isEmpty 的使用:在列表为空时返回true
l5 += 2
println(l5.isEmpty)
输出
false
4. Set
与其他任何一种编程语言一样,Scala中的Set集合类具有如下特点:
1.不存在有重复的元素。
2.集合中的元素是无序的。换句话说,不能以索引的方式访问集合中的元素。
3.判断某一个元素在集合中比Seq类型的集合要快。
Scala中的集合分为可变与不可变两种,对于Set类型自然也是如此。默认情况下,Scala 使用的是不可变集合,如果想使用可变集合,需引用 scala.collection.mutable.Set 包。
不可变集合
val a =Set(1,2,3,2,1,4,5,6,1,2)
println(a)
输出
HashSet(5, 1, 6, 2, 3, 4)
可变集合
val b =scala.collection.mutable.Set[Int]()
b += 1
b +=(1,2)
println(b)
输出
HashSet(1, 2)
注意:集合添加或删除元素的操作和列表大同小异。
虽然可变Set和不可变Set都有添加或删除元素的操作,但是有一个非常大的差别。对不可变Set进行操作,会产生一个新的set,原来的set并没有改变,这与List一样。 而对可变Set进行操作,改变的是该Set本身,与ListBuffer类似
Map(也叫哈希表(Hash tables))这种数据结构是日常开发中使用非常频繁的一种数据结构,所有的值都可以通过键来获取。Map作为一个存储键值对的容器(key-value),其中key值必须是唯一的。
Map 有两种类型,可变与不可变,区别在于可变对象可以修改它,而不可变对象不可以。 默认情况下,我们可以通过Map直接创建一个不可变的Map容器对象,这时候容器中的内容是不能改变的。如果你需要使用可变集合,你需要显式的引入 import scala.collection.mutable.Map 类。
在 Scala 中 你可以同时使用可变与不可变 Map,不可变的直接使用 Map,可变的使用 mutable.Map。
创建Map(不可变)
val a = Map("A" -> 91,"B" -> 77) //创建Map
println(a)
输出
Map(A -> 91, B -> 77)
Scala Map 几种基本操作:keys、values、
println(a("A"))
println(a("B"))
输出
91
77
println( "a 中的键为 : " + a.keys )
println( "a 中的值为 : " + a.values )
a 中的键为 : Set(A, B)
a 中的值为 : Iterable(91, 77)
可变Map
val b =scala.collection.mutable.Map[String,Int]()
b += ("A" -> 91)
get 的使用
println(b.get("A"))
println(b.get("A").get)
输出
Some(91)
91
getOrElse 的使用(如果有就取出,没有就用默认值“0”)
println(b.getOrElse("A",0))
println(b.getOrElse("B",0))
// 输出
91
0
多种FOR循环取值方式
for((key,value) <- b){
println(key + " : " + value)
}
for(key <- b.keySet){
println(key + " : " + b.getOrElse(key,0))
}
for(value <- b.values){
println(value)
}
for((key,_) <- b){
println(key + " : " + b.getOrElse(key,0))
}
作者介绍:EVETNT,狐小E资深开发工程师,专注移动协同办公平台的SAAS软件开发以及轻应用开发
最近开发了一款移动办公软件狐小E
标签:取出 ++ ali app 扩展 递归 value 表示 区别
原文地址:https://www.cnblogs.com/eetv/p/13227784.html