Scala常规操作之数组、List、Tuple、Set、Map

简介: Scala常规操作之数组、List、Tuple、Set、Map

本文会进行数组、List、元组、Set\Map的实操,有时间再回来整理格式。


数组可以是val类型,但是数据里面的具体值也是可以变的,但其实数组本身是没有变的。


一、数组


1、创建数组有两种方式:

第一种,new出来


val arr = new Array[String](3)

arr(0) = "hello"


第二种,直接赋值


val a = Array("nihao", "hello", "hi")


2、定义可变长数组(需要先引入ArrayBuffer):

import scala.collection.mutable.ArrayBuffer


val b = new ArrayBuffer[Int]

val b = new ArrayBuffer[Int]()


二、List

函数式的编程,追求状态是不可变的,也就是说创建了之后,不再更改值,上面的Array其实是可以变的,即数组即使是val类型,数据里面的具体值也是可以变的,就像一个鸡蛋,虽然里面鸡蛋里面的内容变了,但是这个鸡蛋还是这个鸡蛋。而Lists是不变的,初始化后就无法改变,修改其值会报错。


1、创建List

scala> val list = List(1, 2, 3)
list: List[Int] = List(1, 2, 3)
scala> list(1) = 4
<console>:14: error: value update is not a member of List[Int]
       list(1) = 4
       ^
scala> val otherList = List(5, 6, 7)
otherList: List[Int] = List(5, 6, 7)


拼接List可以用三个冒号:


scala> val newList = list ::: otherList

newList: List[Int] = List(1, 2, 3, 5, 6, 7)


创建List的另外一种方式,Nil表示定义为一个空List,再追加内容:


scala> val oneTwoThree = 1 :: 2 :: 3 :: Nil

oneTwoThree: List[Int] = List(1, 2, 3)


2、进行相关算子操作


filter、map算子操作(其实是会生成一个新的List):


scala> oneTwoThree.filter(i => i>2)
res28: List[Int] = List(3)
scala> oneTwoThree
res29: List[Int] = List(1, 2, 3)
scala> res28
res30: List[Int] = List(3)
scala> oneTwoThree.map(i => i+1)
res31: List[Int] = List(2, 3, 4)
scala> oneTwoThree
res32: List[Int] = List(1, 2, 3)
scala> res31
res33: List[Int] = List(2, 3, 4)


flatMap操作:

scala> oneTwoThree.flatMap(i => i to 5)

res34: List[Int] = List(1, 2, 3, 4, 5, 2, 3, 4, 5, 3, 4, 5)


1 to 5,就是1,2,3,4,5,

2 to 5,就是2,3,4,5,

3 to 5,就是3,4,5,

flatMap会将List里面的元素产生相应的元素后,会进行打平操作,所以里面的元素是同等地位的。

其实 for (i <- 0 to 2) 等价于 for (i <- 0.to(2))


reduceLeft算子操作:

scala> oneTwoThree.reduceLeft((a,b) => a + b)

res35: Int = 6


从左到右,依次累加,第一次循环,1+2=3,第二次继续循环,3+3=6


三、Tuple


List只能装相同类型的内容,此时可以用Tuple装不同类型的类型。


scala> val tuple = (2, "hello")
tuple: (Int, String) = (2,hello)
scala> tuple._1
res36: Int = 2
scala> tuple._2
res37: String = hello
scala> val tuple = (2, 4.44, "shaonaiyi")
tuple: (Int, Double, String) = (2,4.44,shaonaiyi)
scala> tuple._1
res38: Int = 2
scala> tuple._2
res39: Double = 4.44
scala> tuple._3
res40: String = shaonaiyi


还可以赋值,其实也是一种取值的方式:

scala> val (first, second, third) = tuple
first: Int = 2
second: Double = 4.44
third: String = shaonaiyi


此外,还可以按需要取值,如只需要去第一个:

scala> val (first, _, _) = tuple
first: Int = 2


元组tuple里面可以放22个数据。

四、Sets与Maps

Sets与Maps均含有可变与不可变两种

1、Sets操作


scala> val set = Set(1, 1, 2, 4, 5)
set: scala.collection.immutable.Set[Int] = Set(1, 2, 4, 5)
scala> set + 7
res45: scala.collection.immutable.Set[Int] = Set(5, 1, 2, 7, 4)
scala> set
res46: scala.collection.immutable.Set[Int] = Set(1, 2, 4, 5)
scala> val newSet = set + 7
newSet: scala.collection.immutable.Set[Int] = Set(5, 1, 2, 7, 4)
scala> set.contains(7)
res47: Boolean = false
scala> import scala.collection.mutable
import scala.collection.mutable
scala> val mutableSet = mutable.Set(1, 2, 3, 4, 5)
mutableSet: scala.collection.mutable.Set[Int] = Set(1, 5, 2, 3, 4)
scala> mutableSet += 8
res48: mutableSet.type = Set(1, 5, 2, 3, 4, 8)
scala> mutableSet
res49: scala.collection.mutable.Set[Int] = Set(1, 5, 2, 3, 4, 8)
scala> mutableSet + 7
res50: scala.collection.mutable.Set[Int] = Set(1, 5, 2, 3, 7, 4, 8)
scala> mutableSet
res51: scala.collection.mutable.Set[Int] = Set(1, 5, 2, 3, 4, 8)


而不可变的Set执行此操作,会报错的

scala> set
res52: scala.collection.immutable.Set[Int] = Set(1, 2, 4, 5)
scala> set += 7
<console>:15: error: value += is not a member of scala.collection.immutable.Set[Int]
       set += 7
           ^


2、Maps操作:

scala> val map = Map(1 -> "value1", 2 -> "value2")
map: scala.collection.immutable.Map[Int,String] = Map(1 -> value1, 2 -> value2)
scala> map + (3 -> "value3")
res54: scala.collection.immutable.Map[Int,String] = Map(1 -> value1, 2 -> value2, 3 -> value3)
scala> map
res55: scala.collection.immutable.Map[Int,String] = Map(1 -> value1, 2 -> value2)
scala> map(1)
res56: String = value1
scala> val mutableMap = mutable.Map(5 -> "value5", 6 -> "value6")
mutableMap: scala.collection.mutable.Map[Int,String] = Map(5 -> value5, 6 -> value6)
scala> mutableMap += (7 -> "value7")
res57: mutableMap.type = Map(5 -> value5, 7 -> value7, 6 -> value6)
scala> mutableMap
res58: scala.collection.mutable.Map[Int,String] = Map(5 -> value5, 7 -> value7, 6 -> value6)


遍历Maps:

scala> map.foreach{case (key, value) => println(key + " " + value)}
1 value1
2 value2
scala> mutableMap.foreach{case (key, value) => println(key + " " + value)}
5 value5
7 value7
6 value6
scala> for((key, value) <- mutableMap) {
     |   println(key + " " + value)
     | }
5 value5
7 value7
6 value6
相关文章
|
8月前
|
存储 Java 索引
(Python基础)新时代语言!一起学习Python吧!(二):字符编码由来;Python字符串、字符串格式化;list集合和tuple元组区别
字符编码 我们要清楚,计算机最开始的表达都是由二进制而来 我们要想通过二进制来表示我们熟知的字符看看以下的变化 例如: 1 的二进制编码为 0000 0001 我们通过A这个字符,让其在计算机内部存储(现如今,A 字符在地址通常表示为65) 现在拿A举例: 在计算机内部 A字符,它本身表示为 65这个数,在计算机底层会转为二进制码 也意味着A字符在底层表示为 1000001 通过这样的字符表示进行转换,逐步发展为拥有127个字符的编码存储到计算机中,这个编码表也被称为ASCII编码。 但随时代变迁,ASCII编码逐渐暴露短板,全球有上百种语言,光是ASCII编码并不能够满足需求
353 4
|
Python
高阶函数如`map`, `filter`, `reduce`和`functools.partial`在Python中用于函数操作
【6月更文挑战第20天】高阶函数如`map`, `filter`, `reduce`和`functools.partial`在Python中用于函数操作。装饰器如`@timer`接收或返回函数,用于扩展功能,如记录执行时间。`timer`装饰器通过包裹函数并计算执行间隙展示时间消耗,如`my_function(2)`执行耗时2秒。
170 3
|
人工智能 Java
Java 中数组Array和列表List的转换
本文介绍了数组与列表之间的相互转换方法,主要包括三部分:1)使用`Collections.addAll()`方法将数组转为列表,适用于引用类型,效率较高;2)通过`new ArrayList&lt;&gt;()`构造器结合`Arrays.asList()`实现类似功能;3)利用JDK8的`Stream`流式计算,支持基本数据类型数组的转换。此外,还详细讲解了列表转数组的方法,如借助`Stream`实现不同类型数组间的转换,并附带代码示例与执行结果,帮助读者深入理解两种数据结构的互转技巧。
1031 1
Java 中数组Array和列表List的转换
|
Web App开发 存储 前端开发
别再用双层遍历循环来做新旧数组对比,寻找新增元素了!使用array.includes和Set来提升代码可读性
这类问题的重点在于能不能突破基础思路,突破基础思路是从程序员入门变成中级甚至高级的第一步,如果所有需求都通过最基础的业务逻辑来做,是得不到成长的。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
算法 JavaScript 前端开发
使用 Set 类型实现数组的交集运算
【10月更文挑战第30天】使用 `Set` 类型实现数组的交集运算是一种常见且有效的方法,它为我们处理数据集合的运算提供了一种便捷的途径。通过合理地运用这种方法,我们可以轻松地实现数组的交集计算,并在各种编程任务中灵活运用。
|
存储 缓存 Python
Python中的列表(List)和元组(Tuple)是两种重要的数据结构
【7月更文挑战第12天】Python中的列表(List)和元组(Tuple)是两种重要的数据结构
488 1
|
存储 安全 编译器
Python学习日记(一:List、Tuple、dictionary)
1.列表、元组和字典都是序列 2.列表字典可以修改和删除序列中的某个元素,而元组就是一个整体,不能修改和删除,一定要修改或删除的话,只能修改和删除整个元组。 3.既然元组不能删除和修改,有什么作用呢? 1.元组比列表遍历速度快,因为元组是一个整体,运算效率高; 2.正是因为不能修改,元组可以保护不需要修改的数据,可以使代码结构更安全。
290 2
|
存储 Python
Python中list, tuple, dict,set的区别和使用场景
Python中list, tuple, dict,set的区别和使用场景
1527 2
|
分布式计算 DataWorks 监控
DataWorks操作报错合集之遇到“OSERROR: argument list too long”的错误,该如何处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
303 1
|
Java API
使用 Java 来实现两个 List 的差集操作
使用 Java 来实现两个 List 的差集操作
1807 3

热门文章

最新文章