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中做到这一点?
您可以使用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集合库的一些介绍性文本,例如文档中的文本.