【问题标题】:value map isn't a member of int值映射不是 int 的成员
【发布时间】:2018-05-05 13:23:20
【问题描述】:

所以我有以下简单的代码。 我想要做的是为 (char , int)
的给定元组列表生成 示例中解释的另一个列表:

对于List((a,2),(b,1)),我想要一个列表List(List((a,1)),List((a,2)),List((b, 1)))。

val abba = List(('a', 2), ('b', 2))
abba.map(elt=> for(t<-elt._2) yield (elt,t))

我在以下 sn-p 代码上测试了我的方法,但出现以下错误:

错误:(72, 31) 值映射不是 Int 的成员 abba.map(elt=> for(t

关于如何解决这个问题的任何提示?

【问题讨论】:

    标签: scala


    【解决方案1】:

    如果我正确解释了您的要求:

    对于List((a,2),(b,1)),我想要一个列表List(List((a,1)) ,List((a,2)), List((b,1)))

    您可以使用flatMapfor/yield 和输入1 to elt._2 生成您的列表列表:

    val abba = List(('a', 2), ('b', 1))
    
    abba.flatMap( elt => for(t <- 1 to elt._2) yield List((elt._1, t)) )
    // res1: List[List[(Char, Int)]] = List(List((a,1)), List((a,2)), List((b,1)))
    

    或者,您可以使用case 部分函数,​​如下所示:

    abba.flatMap{ case (c, i) => for (j <- 1 to i) yield List((c, j)) }
    // res2: List[List[(Char, Int)]] = List(List((a,1)), List((a,2)), List((b,1)))
    

    【讨论】:

      【解决方案2】:

      for(t&lt;-elt._2) yield (elt,t) 等价于elt._2.map(t =&gt; (elt, t))elt._2 是当前元组的第二个元素,所以它是一个整数。整数没有map 方法,所以上面的不行。

      查看您的预期输出,您似乎想要将 t 从 1 迭代到 elt._2。您可以使用to 方法做到这一点:

      for(t <- 1 to elt._2) yield (elt._1, t)
      

      看起来您还希望原始元组的第一个元素成为新元组的第一个元素,所以我也添加了._1

      作为一种风格说明,在元组上使用模式匹配而不是 ._1._2 可能会更简洁一些。

      【讨论】:

        猜你喜欢
        • 2015-10-29
        • 2016-05-01
        • 2019-09-10
        • 1970-01-01
        • 2020-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多