List(-6ren">
gpt4 book ai didi

scala - 如何在集合上减少(),将集合本身​​保留在 Scala 中?

转载 作者:行者123 更新时间:2023-12-02 08:27:49 27 4
gpt4 key购买 nike

我只需要减少集合中的元素,但我想将集合保留在结果中。

scala> List("a","b","c").reduce(_+_)
res0: String = abc

我想得到

scala> List("a","b","c").someSortOfReduce(_+_)
res0: List[String] = List(abc)

scala> Seq("a","b","c").someSortOfReduce(_+_)
res1: Seq[String] = Seq(abc)

最佳答案

这是一种方法(可能不是最优雅的,但是,嘿,它有效):

import collection.generic._
def reduceAsCollection[E,C[_]](s: C[E])(f: (E,E) => E)(implicit cbf: CanBuildFrom[Nothing, E, C[E]], e: C[E] <:< TraversableOnce[E]): C[E] = {
(cbf() += s.reduce(f)).result
}

以及强制性的 REPL 测试:

scala> reduceAsCollection(List("a","b","c"))(_+_)
res14: List[String] = List(abc)

scala> reduceAsCollection(Seq("a","b","c"))(_+_)
res15: Seq[String] = Vector(abc)

如您所见,不仅生成的集合具有适当的运行时类型,而且还保留了静态类型(给 Seq 返回 Seq,给一个 List,返回一个 List

关于scala - 如何在集合上减少(),将集合本身​​保留在 Scala 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30393382/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com