在scala中将两个列表的值的总和添加到新列表中

0 scala sum list add

v1 = [1,2,3,4]
v2 = [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)

我需要这些列表的总和: [2,4,6,8,5]

有没有办法打印执行+ b = c的元素,其中c是例如8?

我怎么能在scala中做到这一点?

Ben*_*ich 5

您可以使用zipAll将列表压缩在一起.该方法接受两个额外的参数,这些参数表示在一个列表比另一个列表长的情况下使用的元素,反之亦然.由于您要添加列表,因此应使用附加标识0.然后,您可以简单地map在生成的元组列表上:

val v1 = List(1, 2, 3, 4)
val v2 = List(1, 2, 3, 4, 5)
v1.zipAll(v2, 0, 0).map { case (a, b) => a + b }
Run Code Online (Sandbox Code Playgroud)

您可以阅读文档zipAll中的文档IterableLike.最相关的部分:

通过成对组合相应的元素,返回由此可迭代集合和另一个可迭代集合形成的可迭代集合.如果两个集合中的一个比另一个更短,则使用占位符元素将较短的集合扩展为较长的集合.

如果您要打印出某些元素,可以选择filter代替map,然后使用foreach:

v1.zipAll(v2, 0, 0).filter { 
    case(a, b) => a + b == 8 
}.foreach { 
    case(a, b) => println(s"$a+$b=8") 
}
Run Code Online (Sandbox Code Playgroud)

或者只是一个foreach更有趣的case陈述:

v1.zipAll(v2, 0, 0).foreach { 
    case(a, b) if a + b == 8  => println(s"$a+$b=8")
    case _ => 
}
Run Code Online (Sandbox Code Playgroud)

或者您可以使用collect,并忽略返回值:

v1.zipAll(v2, 0, 0).collect { 
    case(a, b) if a + b == 8 => println(s"$a+$b=8") 
}
Run Code Online (Sandbox Code Playgroud)

您可能希望阅读Scala集合库的一些介绍性文本,例如文档中的文本.