快速入门Scala⑥ 对List表操作

不可变列表

列表是scala中最重要的、也是最常用的数据结构

  • 可以保存重复值
  • 有先后顺序

在scala中,也有两种列表,一种是不可变列表、另一种是可变列表

定义

不可变列表就是列表的元素、长度都是可变的。

语法:

var/val 变量名=List(元素1,元素2,元素3...)
使用Nil创建一个不可的空列表
var/val 变量名=Nil
使用::方法创建一个不可变的列表
var/val 变量名=元素1:: 元素2::Nil
使用::拼接方式来创建列表,必须在最后添加一个Nil

示例一

创建一个不可变得列表,存放一下几个元素(1,2,3,4)

参考代码

scala> var a=List(1,2,3,4)
a: List[Int] = List(1, 2, 3, 4)

示例二

使用Nill创建一个不可变空列表

参考代码

scala> var b=Nil
b: scala.collection.immutable.Nil.type = List()

示例三

使用:: 方法创建列表,包含-2,-1两个元素

参考代码

scala> var c= -2:: -1 :: Nil
c: List[Int] = List(-2, -1)

可变列表

可变列表就是列表的元素,长度都是可变的(先导入 import scala.collection.mutable.ListBuffer

  • 可变集合都在mutable包中
  • 不可变集合都在immutable包中(默认导入)

定义

使用ListBuffer[元素类型]()创建空的可变列表

var/val 变量名 = ListBuffer[Int]()

使用ListBuffer(元素1,元素2,元素3...)创建可变列表

var/val 变量名 = ListBuffer(元素1,元素2,元素3...)

示例一

创建空的整形可变列表

参考代码

var a=ListBuffer[Int]()
import scala.collection.mutable.ListBuffer
scala> 
scala> a: scala.collection.mutable.ListBuffer[Int] = ListBuffer()

示例二

创建一个可变列表,包含以下元素:1,2,3,4

参考代码

scala> var b=ListBuffer(1,2,3,4)
b: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4)

可变列表常用操作

  • 获取元素(使用括号访问(索引值))
  • 添加元素(+=)
  • 追加一个列表(++=)
  • 更改元素(使用括号获取元素,然后进行赋值)
  • 删除元素(-=)
  • 转换为list (toList)
  • 转换为Array  (toArray)

参考代码

 创建可变列表
scala> var c=ListBuffer(1,2,3,4,5,6,7,8)
c: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4, 5, 6, 7, 8)
获取元素
scala> println(c(0))
1
添加元素
scala> c +=9
res12: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9)
添加列表
scala> c ++= List(11,12)
res14: scala.collection.mutable.ListBuffer[Int] = ListBuffer(1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12)
删除元素
scala> c -= 1
res16: scala.collection.mutable.ListBuffer[Int] = ListBuffer(2, 3, 4, 5, 6, 7, 8, 9, 11, 12)
转换为List
scala> c.toList
res17: List[Int] = List(2, 3, 4, 5, 6, 7, 8, 9, 11, 12)
转换Array
scala> c.toArray
res18: Array[Int] = Array(2, 3, 4, 5, 6, 7, 8, 9, 11, 12)

列表常用操作

  • 判断列表是否为空(isEmpty)
  • 拼接两个列表(++)
  • 获取列表的首个元素(head)和剩余部分(tail)
  • 反转列表(reverse)
  • 获取前缀(take)、获取后缀(drop)
  • 扁平化(flaten)
  • 拉链(zip)和拉开(unzip)
  • 转换字符转(toString)
  • 生成字符串(mkString)
  • 并集(union)
  • 交际(intersect)
  • 差集(diff)

代码操作

创建2个列表
scala> var arr1=List(1,2,3,4,5)
arr1: List[Int] = List(1, 2, 3, 4, 5)
scala> var arr2=List(3,4,5,6,7,8)
arr2: List[Int] = List(3, 4, 5, 6, 7, 8)
判断列表是否为空
scala> println(arr1.isEmpty)
false
判断两个列表
scala> arr1++arr2
res1: List[Int] = List(1, 2, 3, 4, 5, 3, 4, 5, 6, 7, 8)
获取首个元素
scala> println(arr1.head)
剩余部分
scala> println(arr1.tail)
List(2, 3, 4, 5)
反转列表
scala> arr1.reverse
res5: List[Int] = List(5, 4, 3, 2, 1)
获取前缀
scala> arr1.take(2)
res7: List[Int] = List(1, 2)
获取后缀
scala> arr1.drop(2)
res8: List[Int] = List(3, 4, 5)
扁平化
scala> var arr3=List(List(1,2),List(3),List(4,5))
arr3: List[List[Int]] = List(List(1, 2), List(3), List(4, 5))
scala> arr3.flatten
res9: List[Int] = List(1, 2, 3, 4, 5)
拉链
scala> var arr4=List("zhangsan","lisi","wuwang")
arr4: List[String] = List(zhangsan, lisi, wuwang)
scala> var arr5=List(20,18,19)
arr5: List[Int] = List(20, 18, 19)

scala> arr4.zip(arr5)
res10: List[(String, Int)] = List((zhangsan,20), (lisi,18), (wuwang,19))
拉开
scala> res10.unzip
res11: (List[String], List[Int]) = (List(zhangsan, lisi, wuwang),List(20, 18, 19))
转换字符串
scala> arr4.toString()
res12: String = List(zhangsan, lisi, wuwang)
生成字符串
scala> arr4.mkString
res13: String = zhangsanlisiwuwang
并集
scala> arr1.union(arr2)
res16: List[Int] = List(1, 2, 3, 4, 5, 3, 4, 5, 6, 7, 8)
交际
scala> arr1.intersect(arr2)
res17: List[Int] = List(3, 4, 5)
差集
scala> arr1.diff(arr2)
res18: List[Int] = List(1, 2)

List 练习题

定义一个列表list1,内容为("a", "b" ,"c","d","e")
scala> var list1=List("a", "b" ,"c","d","e")
arr1: List[String] = List(a, b, c, d, e)
var list2=ListBuffer("a", "b" ,"c","d","e")
import scala.collection.mutable.ListBuffer
scala> arr2: scala.collection.mutable.ListBuffer[String] = ListBuffer(a, b, c, d, e)
在list1列表开头添加元素t
scala> list2.insert(0,"t")
"t" ++ list1
在列表开头添加指定列表List("m","n")的元素
List("m", "n") ++ list1
在列表list1后添加元素1
list1++ ("1")
list2.+=("2")
将列表的所有元素添加到 StringBuilder
var stringBuilder = new StringBuilder()
stringBuilder.append(list1)
将列表的所有元素添加到 StringBuilder并指定分隔符为","
list1.addString(stringBuilder,",")
获取列表索引为0的元素
println(list1(0))
检测列表中是否包含指定的元素a
println(list1.contains("a"))
向list1列表中追加数据"a"
list1 ++ ("a")
去除list1列表的重复元素,并返回新列表
val distinct = list1.distinct
list1丢弃前3个元素,并返回新列表
list1.drop(3)
list1丢弃最后2个元素,并返回新列表
list1.take(list1.length-2)
检测列表list1是否以指定a结尾
list1.endsWith(Seq("a"))
判断是否是以指定a开始的列表list1
list1.startsWith(Seq("a"))
获取list1列表的第一个元素
list1(0)
在list1中从指定位置 0 开始查找元素d第一次出现的位置
list1.indexOf("d",0)
list1返回所有元素,除了最后一个
list1.init
list1.take(list1.length-1)
检测列表list1是否为空
list1.isEmpty
返回list1列表最后一个元素
list1.drop(list1.length-1)
list1.last

2

发布了88 篇原创文章 · 获赞 99 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/qq_43791724/article/details/105153218