【问题标题】:Scala: Generate tuple of IntsScala:生成整数元组
【发布时间】:2017-04-14 16:40:36
【问题描述】:

我想生成一个由两个 Int 组成的元组向量。现在,我执行以下操作:

(0 until 100).map(x => (x+1 until 100).map(y => (x,y))).flatten.filter { ... }

我想知道是否有更有效的方法来做到这一点。我觉得“扁平化”会减慢代码的速度。我必须使用“flatten”还是可以使用其他东西?

PS1:如果我不使用“flatten”,我有: Vector(Vector(a,b),Vector(c,d),...) 而不是 Vector((a,b),(c ,d),...)。

PS2:我在第二个生成器中使用 (x+1 until 100),因为我对元组 (a,b) 和 (b,a) 不感兴趣。

【问题讨论】:

    标签: scala vector flatten


    【解决方案1】:
    for {
      i <- 0 until 100
      j <- i+1 until 100
    } yield (i,j)
    

    【讨论】:

      【解决方案2】:

      map(f).flatten 可以缩写为flatMap(f),所以你会得到

      (0 until 100).flatMap(x => (x+1 until 100).map(y => (x,y))).filter(...)
      

      这相当于 Tzach Zohar 的回答,但您可以看到关系。将filter 移动到flatMap 中也可能是值得的(它会被调用更多次,但你会得到更小的中间集合)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-25
        • 2014-09-04
        • 1970-01-01
        • 2010-11-24
        • 1970-01-01
        相关资源
        最近更新 更多