F#提取含空子列表的嵌套列表首元素报错如何解决?
问题原因
原来的代码使用List.head处理子列表,该函数仅支持非空列表输入,遇到空子列表时就会抛出System.ArgumentException: The input list was empty.异常。
解决方案
根据需求「非空子列表返回首元素、空子列表对应返回空列表」,对每个子列表做模式匹配分别处理即可,修改后的代码如下:
let firstCol (lst: 'a list list) = List.map (function | [] -> [] | head :: _ -> [head]) lst
效果示例
输入:firstCol [[1;2]; []; [3;4]; []]
输出:[[1]; []; [3]; []]
可选扩展方案
如果你需要的返回结果不需要嵌套列表,也可以选择返回option类型列表,空列表对应None,非空对应Some 首元素,代码如下:
let firstCol (lst: 'a list list) = List.map (function | [] -> None | head :: _ -> Some head) lst
该版本输入相同测试用例的输出为:[Some 1; None; Some 3; None]
内容的提问来源于stack exchange,提问作者Blib
相关产品推荐
相关产品推荐

