文章目录(Table of Contents)
数组
List,Array与Tuple
在Scala中,上面三者的不同点如下:
- List是不可以修改的,Array是可以修改的;
- List中只能包含相同的数据类型,Tuples 可以包含不同类型的数据;
声明数组并访问
- Array的声明与访问
下面代码展现了声明和访问,我们通过greetString(i)的方式进行访问。
- val greetStrings =Array("hello",",","world!")
- for (i<-0 to 2){
- println(greetStrings(i))
- }
当然,我们也可以通过下面的方式进行数组的声明:
- val greetStrings = new Array[String](3)
- greetStrings(0)="hello"
- greetStrings(1)=","
- greetStrings(2)="world!\n"
- List的声明与访问
同样List的声明也可以这样,访问也是通过下标进行访问:
- val oneTwo = List(1,2)
- for (i <- 0 to oneTwo.length-1){
- println(oneTwo(i))
- }
- Tuple的声明与访问
Tuple的访问与上面的有一些区别,使用 ._ 来索引元祖的元素,同时要注意的是元组的索引从1开始;
- val pair = (99, "Luftballons")
- scala> println(pair._1)
- >> 99
- scala> println(pair._2)
- >> Luftballons
上面这个例子讲明了Tuple的声明与访问;
合并列表
合并列表有两种方式(我知道的),分别是:::和++,但是:::只能用于连接两个List,故下面我使用++;
- 合并List
- val oneTwo = List(1,2)
- val threeFour = List(3,4)
- // 使用:::将两个 list 连接起来
- val oneTwoThreeFour = oneTwo ::: threeFour
- val oneTwoThreeFour = oneTwo ++ threeFour // 上下两种作用相同
- >> oneTwoThreeFour: List[Int] = List(1, 2, 3, 4)
- 合并Array
- val oneTwo = Array(1,2)
- val threeFour = Array(3,4)
- val oneTwoThreeFour = oneTwo ++ threeFour
- >> oneTwoThreeFour: Array[Int] = Array(1, 2, 3, 4)
追加元素
- 在List中追加元素
- val oneTwo = List(1,2,3)
- 0::oneTwo
- >> res121: List[Int] = List(0, 1, 2, 3)
- oneTwo :+ 4 // 在List最后加上4
- >> res119: List[Int] = List(1, 2, 3, 4)
- 0 +: oneTwo // 在List前面加上0
- >> res120: List[Int] = List(0, 1, 2, 3)
- 在Array中追加元素
- oneTwo :+ 4 // :+ 是在末尾添加
- >> res133: List[Int] = List(1, 2, 3, 4)
- 0 +: oneTwo // +: 实在前面添加
- >> res134: List[Int] = List(0, 1, 2, 3)
常见符号(scala中:: , +:, :+, :::, +++的区别)
::
该方法被称为cons,意为构造,向队列的头部追加数据,创造新的列表。用法为x::list
,其中x
为加入到头部的元素,无论x
是列表与否,它都只将成为新生成列表的第一个元素,也就是说新生成的列表长度为list的长度+1(btw,x::list
等价于list.::(x)
):+
和+:
两者的区别在于:+
方法用于在尾部追加元素,+:
方法用于在头部追加元素,和::
很类似,但是::
可以用于pattern match ,而+:
则不行. 关于+:
和:+
,只要记住冒号永远靠近集合类型就OK了。++
该方法用于连接两个集合,list1++list2
:::
该方法只能用于连接两个List类型的集合
参考链接:scala中:: , +:, :+, :::, +++的区别
集合
Scala 语言的一个设计目标是让程序员可以同时利用面向对象和面向函数的方法编写代码,因此它提供的集合类分成了可以修改的集合类和不可以修改的集合类两大类型。
比如 Array总是可以修改内容的,而 List 总是不可以修改内容的。
类似的情况,Scala 也提供了两种 Sets 和 Maps 集合类。Sets是可以修改的,Maps是不可以修改的;
- Sets集合类
- var jetSet = Set("Beoing","Airbus")
- jetSet = jetSet + "Lear"
- >> jetSet: scala.collection.immutable.Set[String] = Set(Beoing, Airbus, Lear)
- println(jetSet.contains("Cessna")) //判断是否在集合中
- >> false
- 集合的一些运算
- val set1 = Set(1,2,3)
- val set2 = Set(2,3,4)
- set1 & set2 // 交集
- >> res137: scala.collection.immutable.Set[Int] = Set(2, 3)
- set1 ++ set2 // 并集
- >> res139: scala.collection.immutable.Set[Int] = Set(1, 2, 3, 4)
- set1.diff(set2) // 补集
- >> res138: scala.collection.immutable.Set[Int] = Set(1)
- Maps集合类
Map(映射)是一种可迭代的键值对(key/value)结构;
- // 定义新的Map
- var romanNumeral = Map ( 1 -> "I", 2 -> "II", 3 -> "III", 4 -> "IV", 5 -> "V")
- romanNumeral += (6->"VI")// 添加键值对
- romanNumeral(6)
- >> res143: String = VI
- romanNumeral.keys // 返回所有的Key
- >> res144: Iterable[Int] = Set(5, 1, 6, 2, 3, 4)
- romanNumeral.values // 返回所有的Value
- >> res145: Iterable[String] = MapLike.DefaultValuesIterable(V, I, VI, II, III, IV)
- 微信公众号
- 关注微信公众号
- QQ群
- 我们的QQ群号
评论