Nim语言:寻求首个非连续数字的函数式实现方案
Nim函数式实现首个非连续数字
这里提供一种符合函数式编程风格的实现方式,核心是利用序列操作替代显式循环,代码如下:
import options, sequtils proc first_non_consecutive*(arr: seq[int]): Option[int] = if arr.len < 2: return none(int) arr.zip(arr[1..^0]) .findIt(curr - prev > 1) .mapIt(it[1]) .toOption()
实现思路
- 配对相邻元素:
zip(arr, arr[1..^0])将原数组与它从第二个元素开始的切片进行配对,生成一系列(prev, curr)形式的相邻元素对。 - 查找目标配对:
findIt(curr - prev > 1)遍历这些元素对,找到第一个满足“当前元素与前一个元素差值大于1”的配对,返回一个包含该配对的Option类型。 - 提取结果并转换类型:
mapIt(it[1])提取配对中的当前元素(即首个非连续的数字),最后通过toOption()确保结果统一为Option[int]类型——如果没有找到符合条件的元素,会自动返回none(int)。
另外补充边界处理:当输入数组长度小于2时,直接返回 none(int),避免无意义的配对操作。
内容的提问来源于stack exchange,提问作者Izzy030
相关产品推荐
相关产品推荐

