gpt4 book ai didi

Scala:从一种类型的集合到另一种类型的 yield

转载 作者:行者123 更新时间:2023-12-03 20:01:14 27 4
gpt4 key购买 nike

关于 Scala 中的 yield 命令和以下示例:

val values = Set(1, 2, 3)
val results = for {v <- values} yield (v * 2)
  • 谁能解释 Scala 如何知道要生成哪种类型的集合?我知道它基于值,但是我将如何编写复制产量的代码?
  • 有什么办法可以让我改变要产生的集合的类型吗?在示例中,我希望结果的类型为 List 而不是 Set。
  • 如果做不到这一点,从一个集合转换到另一个集合的最佳方法是什么?我知道 _:*,但是因为 Set 不是 Seq,所以这是行不通的。到目前为止我能找到的最好的是 val listResults = List()++ results。

    附言。我知道该示例没有遵循推荐的功能方式(即使用 map),但这只是一个示例。
  • 最佳答案

    for理解由编译器翻译成 map/flatMap/filter使用 this 调用方案。

    This excellent answer by Daniel回答你的第一个问题。

    要更改结果集合的类型,您可以使用 collection.breakout (也在我上面链接的帖子中进行了解释。)

    scala> val xs = Set(1, 2, 3)
    xs: scala.collection.immutable.Set[Int] = Set(1, 2, 3)

    scala> val ys: List[Int] = (for(x <- xs) yield 2 * x)(collection.breakOut)
    ys: List[Int] = List(2, 4, 6)

    您可以转换 SetList使用以下方式之一:
    scala> List.empty[Int] ++ xs
    res0: List[Int] = List(1, 2, 3)

    scala> xs.toList
    res1: List[Int] = List(1, 2, 3)

    推荐阅读: The Architecture of Scala Collections

    关于Scala:从一种类型的集合到另一种类型的 yield ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6800520/

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