首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在函数式风格中粗化(而不是扁平化)列表?

如何在函数式风格中粗化(而不是扁平化)列表?
EN

Stack Overflow用户
提问于 2010-05-20 23:26:25
回答 7查看 458关注 0票数 6

例如,我有一个列表(1 2 3 4 5 6 7 8 9 10 11),希望用3个元素(或另一个长度)粗化它以获得((1 2 3) (4 5 6) (7 8 9) (10 11))。我可以使用什么漂亮的代码来做这件事呢?谢谢。

EN

回答 7

Stack Overflow用户

发布于 2010-05-20 23:44:02

代码语言:javascript
运行
复制
List(1,2,3,4,5,6,7,8,9,10,11) grouped 3 toList

res0: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6), 
List(7, 8, 9), List(10, 11))
票数 15
EN

Stack Overflow用户

发布于 2010-05-21 01:22:26

由于您也使用了Clojure标记...

在Clojure 1.2中有一个内置的函数可以做到这一点,在clojure.contri.seq-utils的1.1中也提供了该函数。

代码语言:javascript
运行
复制
(partition-all 3 [1 2 3 4 5 6 7 8 9 10 11])
; => ((1 2 3) (4 5 6) (7 8 9) (10 11))

另请参见partitionpartition-by。还要注意的是,如果你需要一些稍微不同的东西,partitionpartition-all会接受一些可选的参数,例如(doc partition)

票数 15
EN

Stack Overflow用户

发布于 2010-05-20 23:51:31

在Scala2.8中,List混合了IterableLike,它有一个分组的方法,它返回一个Iterator[ListT],然后它可以被转换为List[ListT]。

代码语言:javascript
运行
复制
List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11).grouped(3).toList

res3: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6), List(7, 8, 9), List(10, 11))

如果你想在列表中使用一个粗略的方法,你可以使用隐式转换,类似于:

代码语言:javascript
运行
复制
scala> class RList[T](val l: List[T]) {def roughen(n: Int) = l.grouped(n).toList}
defined class RList

scala> implicit def list2rlist[T](l: List[T]) = new RList(l)
list2rlist: [T](l: List[T])RList[T]    

scala> List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) roughen 3
res5: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6), List(7, 8, 9), List(10, 11))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2875223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档