33.List的一阶函数操作代码实战详解

本文介绍Scala中List的基本操作,包括连接、切片、索引、转换等,并通过实例展示如何利用List的特性来提高编程效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、List的drop、take、splitAt、apply、indices、toString、mkString等实战

把两个List组拼起来,列表和列表连接用三个冒号的连接操作符,元素和列表连接用两个冒号的连接操作符

    println(List(1,2,3,4) ::: List(5,6,7) ::: List(8,9))
    println(List(1,2,3,4) ::: (List(5,6,7) ::: List(8,9)))
    println(List(1,2,3,4).length)
输出:

List(1, 2, 3, 4, 5, 6, 7, 8, 9)
List(1, 2, 3, 4, 5, 6, 7, 8, 9)
4


List的相关操作方法:

    val bigdata = List(0,1,2)
    println(bigdata.last)  //List最后一个元素
    println(bigdata.init)   //List中除去最后一个元素,其余元素的集合
    println(bigdata.reverse) //把List元素反转过来
    println(bigdata take 2)  //取List前2个元素
    println(bigdata drop 2)  //丢掉List前2个元素
    println(bigdata splitAt 2) // 把List分成两部分,前面一个部分有2个元素
    println(bigdata.apply(2)) //取下标为2的元素
    println(bigdata(2))  //同上,取下标为2的元素

输出:

2
List(0, 1)
List(2, 1, 0)
List(0, 1)
List(2)
(List(0, 1),List(2))
2
2

List的相关操作方法:

    val data = List('a','b','c','d','e','f')
    println(data indices)  //取出List所有元素相对应的索引
    println(data.indices zip data)  //把左右两个集合进行拉链操作
    println(data zipWithIndex)   //把元素和索引具体进行配对的简便方法
    println(data.toString())  
   println(data mkString("[",",","]"))  //把List元素按照新的方式进行格式化输出  
    //第一个参数是格式化输出的开始第一个元素,第二个参数是集合中每2个元素之间的元素,第三个参数是格式化输出的最后一个元素
  
   println(data.mkString("*"))   //格式化输出,只关心中间的元素
    println(data mkString)

输出:

Range(0, 1, 2, 3, 4, 5)
Vector((0,a), (1,b), (2,c), (3,d), (4,e), (5,f))
List((a,0), (b,1), (c,2), (d,3), (e,4), (f,5))
List(a, b, c, d, e, f)
[a,b,c,d,e,f]
a*b*c*d*e*f
abcdef


List本身不变,要想作改变元素的操作,都会产生新的List,可以把对List改变的操作放在StringBuilder里

    val builder = new StringBuilder  //相当于缓冲数组
    data.addString(builder,"[", ",", "]")  //把data操作后的结果存入对象
    println(builder)
    println(data)

输出:

[a,b,c,d,e,f]
List(a, b, c, d, e, f)

Array和List可以相互转换:

    val array = data.toArray
    println(array.toList)
输出:List(a, b, c, d, e, f)

把List内容拷贝进一个数组中

    val new_Array = new Array[Char](10)  //注意要拷贝进的这个数组必须能放下List的所有元素
    data.copyToArray(new_Array, 3)  //跳过数组前3个元素
    new_Array.foreach(print)
输出:

   abcdef


迭代器:

    val iterator = data.toIterator
    println(iterator.next)
    println(iterator.next)
输出:

a
b

Spark之所以非常强大,让各个不同的框架(图计算、机器学习、流处理SQL)可以互相操作,主要因为有Iterator接口。

eg:机器学习可以直接使用Spark SQL中的内容,其中非常重要的是Spark SQL会产生RDD,要读取RDD的数据,有Iterator接口,不断next、next.......因为接口统一,读取数据的方式统一,机器学习不用关心数据来自Spark SQL还是流处理。



参考资料来源于大数据梦工厂 深入浅出scala 第33讲 由王家林老师讲解


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值