value map不是int的成员

时间:2018-05-05 13:23:21

标签: scala

所以我有以下简单的代码。 我想要做的是为(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))

我在下面的代码片段中测试了我的方法,但是我收到了以下错误:

错误:(72,31)值映射不是Int的成员     abba.map(elt =&gt; for(t&lt; -elt._2)yield(elt,t))

有关如何解决此问题的任何提示?

2 个答案:

答案 0 :(得分:0)

for(t<-elt._2) yield (elt,t)相当于elt._2.map(t => (elt, t))elt._2是当前元组的第二个元素,因此它是一个整数。整数没有map方法,因此上述方法无效。

查看您的预期输出,看起来您希望将t从1迭代到elt._2。您可以使用to方法执行此操作:

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

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

作为样式注释,在元组上使用模式匹配而不是._1._2可能会更清晰。

答案 1 :(得分:0)

如果我正确理解您的要求:

  

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

您可以使用 {{ html()->multiselect('tags_list', $posts->tags->pluck('name', 'id'), $posts->tags->pluck('id')->toArray())->class('form-control select2-tags')) }} 生成列表清单,使用输入flatMap生成for/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