3

一个幺半群类型的列表或数组A也是一个幺半群。现在我想combine使用cats.

scala> 1 |+| 2
res1: Int = 3

scala> Array(1, 2, 3) |+| Array(1, 2, 3)
<console>:21: error: value |+| is not a member of Array[Int]
   Array(1, 2, 3) |+| Array(1, 2, 3)

我想得到相反Array(2, 4, 6)的结果。Array(1, 2, 3) |+| Array(1, 2, 3)我怎样才能做到这一点 ?

4

1 回答 1

2

combineon aSeq或 anArray通常意味着附加它们以创建新的集合。

但是,您可以通过定义自己的Monoid, 来zip代替append. 这是我在飞行中想到的:

implicit val zipArrayMonoid = new Monoid[Array[Int]] {
  override def combine(x: Array[Int], y: Array[Int]) = {
    x.zip(y).map {
      case (a, b) => a + b
    }
  }

  override def empty = Array.empty
}

这将导致不同大小的数组忽略它们的附加值(这就是实现的作用,您可以在此处zip查看文档)

这是一个带有结果的 scalaFiddle:https ://scalafiddle.io/sf/YzdUl4L/0

于 2017-03-07T13:20:05.300 回答