加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

然后在List scala中

发布时间:2020-12-16 18:44:27 所属栏目:安全 来源:网络整理
导读:有没有人有一个如何使用和使用列表的例子?我注意到,然后为List定义了但是文档没有一个示例来说明如何使用它. 我的理解是f和然后g意味着执行函数f然后执行函数g.函数g的输入是函数f的输出.它是否正确? 问题1 – 我编写了以下代码,但我不明白为什么我应该使
有没有人有一个如何使用和使用列表的例子?我注意到,然后为List定义了但是文档没有一个示例来说明如何使用它.

我的理解是f和然后g意味着执行函数f然后执行函数g.函数g的输入是函数f的输出.它是否正确?

问题1 – 我编写了以下代码,但我不明白为什么我应该使用和然后因为我可以用map实现相同的结果.

scala> val l = List(1,2,3,4,5)
l: List[Int] = List(1,5)

//simple function that increments value of element of list
scala> def f(l:List[Int]):List[Int] = {l.map(x=>x-1)}
f: (l: List[Int])List[Int]

//function which decrements value of elements of list
scala> def g(l:List[Int]):List[Int] = {l.map(x=>x+1)}
g: (l: List[Int])List[Int]

scala> val p = f _ andThen g _
p: List[Int] => List[Int] = <function1>

//printing original list
scala> l
res75: List[Int] = List(1,5)

//p works as expected.
scala> p(l)
res74: List[Int] = List(1,5)

//but I can achieve the same with two maps. What is the point of andThen?
scala> l.map(x=>x+1).map(x=>x-1)
res76: List[Int] = List(1,5)

有人可以分享一些实际的例子,其中andThen比filter,map等方法更有用.上面我可以看到的一个用途是,然后我可以创建一个新函数p,它是其他函数的组合.但是这种用法带来了andThen的有用性,而不是List和andThen

解决方法

然后从PartialFunction继承了List的继承树中的一些父类.当您通过索引访问其元素时,可以使用List作为PartialFunction.也就是说,您可以将List视为从索引(从零开始)到在列表本身中占据该索引的元素的函数.

如果我们有一个清单:

val list = List(1,4)

我们可以像函数一样调用list(因为它是一个):

scala> list(0)
res5: Int = 1

然后我们允许我们用另一个组成一个PartialFunction.例如,也许我想创建一个List,我可以通过索引访问其元素,然后将元素乘以2.

val list2 = list.andThen(_ * 2)

scala> list2(0)
res7: Int = 2

scala> list2(1)
res8: Int = 4

这与在列表上使用map基本相同,除了计算是懒惰的.当然,你可以用一个视图完成同样的事情,但是可能有一些通用的情况,你想要将List视为PartialFunction,而不是(我想不出任何偏离我的头脑) .

在您的代码中,您实际上并没有在List本身上使用andThen.相反,你正在将它用于你传递给地图的函数等.在f和g上映射一次两次并且在f和g之间映射一次之间的结果没有区别.然而,当多次映射变得昂贵时,优选使用该组合物.在列表的情况下,当列表很大时,遍历多次可能在计算上有点昂贵.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读