首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分裂列表F Sharp

分裂列表F Sharp
EN

Stack Overflow用户
提问于 2014-01-25 16:48:14
回答 2查看 1.4K关注 0票数 0

我试图写一种将列表分成两部分的方法。该函数应该返回两个列表的一个元组,函数接受的参数是第一个列表中的项目#,然后是列表。我的意思是

清单1、2、3、4

-> (1,2,3,4)拆分(3,列表)-> (1,2,3,4)

到目前为止,我的情况如下:

代码语言:javascript
复制
let rec mysplit = function
  |(n,[])->([],[])
  |(1,x::xs)->(x::[],xs)
  |(n,x::xs)->  mysplit(n-1,xs)

我不太清楚如何从递归调用中“捕获”元组。不知道在那里应该有一个额外的let语句来临时保存我正在构建的列表。新的语言,所以几种不同的方法将是很好的学习。

EN

回答 2

Stack Overflow用户

发布于 2014-01-25 17:53:12

跳过和带走是你在这里的朋友。当有直接方法时,我不认为您需要执行任何类型的匹配或递归调用。

代码语言:javascript
复制
let split n l = (l |> Seq.take n, l |> Seq.skip n)

至于可能的边缘情况,如果列表中有> n元素,则skip将返回一个空序列,如果序列中有< n元素,take将返回前n个元素。

用您的示例在TryFharp.org中尝试了它,它如预期的那样工作。

票数 7
EN

Stack Overflow用户

发布于 2014-01-25 17:35:12

Lee的回答向您展示了一个可行的解决方案,但要回答您的具体问题,您可以捕获返回给您的值,如下所示:

代码语言:javascript
复制
let before, after = mysplit (2, [1;2;3;4;5])

还可以使用此技巧在单个let语句中声明多个变量:

代码语言:javascript
复制
let i, j, k = (1, 2, 3)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21353294

复制
相关文章

相似问题

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