Scala学习笔记2–数组集合与常见符号

王 茂南 2019年6月11日07:48:18
评论
2827字阅读9分25秒
摘要这一篇是关于Scala学习的第二篇笔记记录,主要关于其中的数组,List,Array与Tuple,和其对应的一些操作。同时会有介绍关于Scala中的集合的介绍。

数组

List,Array与Tuple

在Scala中,上面三者的不同点如下:

  1. List是不可以修改的Array是可以修改的
  2. List中只能包含相同的数据类型Tuples 可以包含不同类型的数据
Scala学习笔记2–数组集合与常见符号

声明数组并访问

  • Array的声明与访问

下面代码展现了声明和访问,我们通过greetString(i)的方式进行访问。

  1. val greetStrings =Array("hello",",","world!")
  2. for (i<-0 to 2){
  3.     println(greetStrings(i))
  4. }

当然,我们也可以通过下面的方式进行数组的声明:

  1. val greetStrings = new Array[String](3)
  2. greetStrings(0)="hello"
  3. greetStrings(1)=","
  4. greetStrings(2)="world!\n"
  • List的声明与访问

同样List的声明也可以这样,访问也是通过下标进行访问:

  1. val oneTwo = List(1,2)
  2. for (i <- 0 to oneTwo.length-1){
  3.     println(oneTwo(i))
  4. }
  • Tuple的声明与访问

Tuple的访问与上面的有一些区别,使用 ._ 来索引元祖的元素,同时要注意的是元组的索引从1开始;

  1. val pair = (99"Luftballons")
  2. scala> println(pair._1)
  3. >> 99
  4. scala> println(pair._2)
  5. >> Luftballons

上面这个例子讲明了Tuple的声明与访问;

合并列表

合并列表有两种方式(我知道的),分别是:::++,但是:::只能用于连接两个List,故下面我使用++;

  • 合并List
  1. val oneTwo = List(1,2)
  2. val threeFour = List(3,4)
  3. // 使用:::将两个 list 连接起来
  4. val oneTwoThreeFour = oneTwo ::: threeFour
  5. val oneTwoThreeFour = oneTwo ++ threeFour // 上下两种作用相同
  6. >> oneTwoThreeFour: List[Int] = List(1234)
  •  合并Array
  1. val oneTwo = Array(1,2)
  2. val threeFour = Array(3,4)
  3. val oneTwoThreeFour = oneTwo ++ threeFour
  4. >> oneTwoThreeFour: Array[Int] = Array(1234)

 

追加元素

  • 在List中追加元素
  1. val oneTwo = List(1,2,3)
  2. 0::oneTwo
  3. >> res121: List[Int] = List(0123)
  4. oneTwo :+ 4 // 在List最后加上4
  5. >> res119: List[Int] = List(1234)
  6. 0 +: oneTwo // 在List前面加上0
  7. >> res120: List[Int] = List(0123)
  •  在Array中追加元素
  1. oneTwo :+ 4 // :+ 是在末尾添加
  2. >> res133: List[Int] = List(1234)
  3. 0 +: oneTwo // +: 实在前面添加
  4. >> res134: List[Int] = List(0123)

 

常见符号(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集合类
  1. var jetSet = Set("Beoing","Airbus")
  2. jetSet = jetSet + "Lear"
  3. >> jetSet: scala.collection.immutable.Set[String] = Set(Beoing, Airbus, Lear)
  4. println(jetSet.contains("Cessna")) //判断是否在集合中
  5. >> false
  • 集合的一些运算
  1. val set1 = Set(1,2,3)
  2. val set2 = Set(2,3,4)
  3. set1 & set2 // 交集
  4. >> res137: scala.collection.immutable.Set[Int] = Set(23)
  5. set1 ++ set2 // 并集
  6. >> res139: scala.collection.immutable.Set[Int] = Set(1234)
  7. set1.diff(set2) // 补集
  8. >>  res138: scala.collection.immutable.Set[Int] = Set(1)
  • Maps集合类 

Map(映射)是一种可迭代的键值对(key/value)结构;

  1. // 定义新的Map
  2. var romanNumeral = Map ( 1 -> "I"2 -> "II"3 -> "III"4 -> "IV"5 -> "V")
  3. romanNumeral += (6->"VI")// 添加键值对
  4. romanNumeral(6)
  5. >> res143: String = VI
  6. romanNumeral.keys // 返回所有的Key
  7. >> res144: Iterable[Int] = Set(516234)
  8. romanNumeral.values // 返回所有的Value
  9. >> res145: Iterable[String] = MapLike.DefaultValuesIterable(V, I, VI, II, III, IV)

 

  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南
  • 本文由 发表于 2019年6月11日07:48:18
  • 转载请务必保留本文链接:https://mathpretty.com/9631.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: