Scala – 可以使用for循环多次使用?
发布时间:2020-12-16 09:23:57 所属栏目:安全 来源:网络整理
导读:一个例子: val l = List(1,2,3)val t = List(-1,-2,-3) 我可以这样做吗? for (i - 0 to 10) yield (l(i)) yield (t(i)) 基本上我想为每次迭代产生多个结果. 解决方法 不清楚你要求什么 – 你期望多个收益的语义是什么.有一点,你可能永远不想使用索引来导航
一个例子:
val l = List(1,2,3) val t = List(-1,-2,-3) 我可以这样做吗? for (i <- 0 to 10) yield (l(i)) yield (t(i)) 基本上我想为每次迭代产生多个结果. 解决方法
不清楚你要求什么 – 你期望多个收益的语义是什么.有一点,你可能永远不想使用索引来导航列表 – 每个调用t(i)都是O(i)来执行.
所以这里有一种你可能会要求的可能性 scala> val l = List(1,3); val t = List(-1,-3) l: List[Int] = List(1,3) t: List[Int] = List(-1,-3) scala> val pairs = l zip t pairs: List[(Int,Int)] = List((1,-1),(2,-2),(3,-3)) 这可能是您可能会要求的另一种可能性 scala> val crossProduct = for (x <- l; y <- t) yield (x,y) crossProduct: List[(Int,(1,-3),-3)) 后来才是语法糖 scala> val crossProduct2 = l flatMap {x => t map {y => (x,y)}} crossProduct2: List[(Int,-3)) 第三种可能性是你要交织它们 scala> val interleaved = for ((x,y) <- l zip t; r <- List(x,y)) yield r interleaved: List[Int] = List(1,-1,3,-3,4,-4,5,-5,6,-6,7,-7,8,-8,9,-9,10,-10) 这是语法糖 scala> val interleaved2 = l zip t flatMap {case (x,y) => List(x,y)} interleaved2: List[Int] = List(1,-10) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |