微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将列表的每个元素传递给Scala中的函数

如何解决将列表的每个元素传递给Scala中的函数

问题:我正在尝试将列表的每个元素传递给Scala中的函数

需要在add函数中将myList的元素传递给arg y,这里x的常数为5

def add(x: Int,y: Int): Int = x + y
val myList = List(2,3,4)

预期输出: 7 8 9

解决方法

使用map将函数add应用于myList中的每个元素,这将返回一个新的List

scala> val x = 5
val x: Int = 5

scala> myList.map(myListElement => add(x,myListElement))
val res19: List[Int] = List(7,8,9)
,

这是一种递归的方式:

def sum(x: Int = 5,y: Int): Int = x + y

def sumElem(xs: List[Int]): List[Int] = {
  @scala.annotation.tailrec
  def sumElemAcc(xs: List[Int],sumXS: List[Int]): List[Int] = {
    if (xs.isEmpty) sumXS
    else sumElemAcc(xs.tail,sumXS :+ sum(y = xs.head))
  }
  sumElemAcc(xs,List())
}

val myList = List(2,3,4)

sumElem(myList)

输出:

res0: List[Int] = List(7,9)
,

所有答案都可以正常工作,但是如果您想以更实用的风格和其他方法来做事情,请尝试以下操作:

.progress-bar span {
    font-size: 1.1rem;
    font-weight: 600;
    line-height: 15px;
    display: block;
    margin: auto;
    position: relative;
}

如果您想尝试咖喱和部分应用的方法。考虑也尝试以下方法之一:

def add(x:Int,y:Int):Int = x+y
val add_5 = (y:Int) => add(5,y)
val li = List(1,2,3)
li.map(add_5) // for me mapping function like this is more intuitive i.e. without arguments 

尽管在编写现实应用程序时很少使用currying和部分应用的功能,并且没有它们也可以完成工作。但是有时候知道它们会使您的代码看起来更加干净和成熟。请考虑使用官方文档,以提高清晰度。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。