所以我有以下简单的代码。 我想要做的是为(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))
有关如何解决此问题的任何提示?
答案 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