如何组合幺半群类型的数组?

How to combine arrays of monoid type?

幺半群类型的列表或数组 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) 的结果。我该怎么做?

combineSeqArray 上通常意味着追加它们以创建一个新的集合。

但是,您可以通过定义自己的 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 实现所做的,您可以查看文档 here

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