包含猫的三个列表的笛卡尔积
Cartesian product of three lists with cats
假设我需要压缩三个列表以获得三元组列表。我可以这样写:
import cats._
import cats.data._
import cats.implicits._
(List(1, 2) |@| List(3, 4) |@| List(5, 6)) map {case (a, b, c) => (a, b, c)}
res1: List[(Int, Int, Int)] = List((1,3,5), (1,3,6), (1,4,5), (1,4,6), (2,3,5), (2,3,6), (2,4,5), (2,4,6))
你能简化一下吗?
有了1.1.0
,就是(a, b, c).tupled
。具有所有导入和依赖项的炸药脚本:
@ import $ivy.`org.typelevel::cats-core:1.1.0`
@ import cats._, cats.data._, cats.implicits._
val triples = (List(1, 2), List(3, 4), List(5, 6)).tupled
println(triples)
输出:
List((1,3,5), (1,3,6), (1,4,5), (1,4,6), (2,3,5), (2,3,6), (2,4,5), (2,4,6))
我不会称它为 "zip",但是,它更像是笛卡尔积。
假设我需要压缩三个列表以获得三元组列表。我可以这样写:
import cats._
import cats.data._
import cats.implicits._
(List(1, 2) |@| List(3, 4) |@| List(5, 6)) map {case (a, b, c) => (a, b, c)}
res1: List[(Int, Int, Int)] = List((1,3,5), (1,3,6), (1,4,5), (1,4,6), (2,3,5), (2,3,6), (2,4,5), (2,4,6))
你能简化一下吗?
有了1.1.0
,就是(a, b, c).tupled
。具有所有导入和依赖项的炸药脚本:
@ import $ivy.`org.typelevel::cats-core:1.1.0`
@ import cats._, cats.data._, cats.implicits._
val triples = (List(1, 2), List(3, 4), List(5, 6)).tupled
println(triples)
输出:
List((1,3,5), (1,3,6), (1,4,5), (1,4,6), (2,3,5), (2,3,6), (2,4,5), (2,4,6))
我不会称它为 "zip",但是,它更像是笛卡尔积。