gpt4 book ai didi

Scala 集合 : transform content and type of the collection in one pass

转载 作者:行者123 更新时间:2023-12-04 17:48:43 24 4
gpt4 key购买 nike

我正在寻找一种有效转换内容的方法 集合的类型。

例如申请mapSet并得到结果为 List .

请注意,我想在对源集合应用转换的同时构建结果集合(即不创建中间集合,然后将其转换为所需的类型)。

到目前为止,我已经想出了这个(将 Set 转换为 List 同时增加 set 的每个元素):

val set = Set(1, 2, 3)

val cbf = new CanBuildFrom[Set[Int], Int, List[Int]] {
def apply(from: Set[Int]): Builder[Int, List[Int]] = List.newBuilder[Int]
def apply(): Builder[Int, List[Int]] = List.newBuilder[Int]
}

val list: List[Int] = set.map(_ + 1)(cbf)

...但我觉得应该有更简洁优雅的方法来做到这一点(每次我需要这样做时都不需要手动实现 CanBuildFrom)。

任何想法如何做到这一点?

最佳答案

这正是 scala.collection.breakOut 是为了——它会让人联想到 CanBuildFrom如果您告诉它所需的新集合类型,则需要:

import scala.collection.breakOut

val xs: List[Int] = Set(1, 2, 3).map(_ + 1)(breakOut)

这只会遍历集合一次。见 this answer了解更多详情。

关于Scala 集合 : transform content and type of the collection in one pass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24125082/

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