考虑到我有一个类似的选项数组,[|Some 1;Some0;None;None;Some0|]
并且我将获取具有None
值的元素的索引,在这种情况下,正确的答案将是[|2;3|]
。
我当前的想法是将数组更改为列表,然后使用递归函数将其抛出,但是在这种情况下,我将需要mutable value
计算索引,并且我不想使用可变变量?
还有其他解决方案吗
这是另一个解决方案:
[|Some 1;Some 0;None;None;Some 0|]
|> Array.indexed
|> Array.filter (fun (i, x) -> x.IsNone)
|> Array.map fst
作为优化,最后2行可以用单个代替|> Array.choose (function (i, None) -> Some i | _ -> None)
。
这是使用序列表达式的另一种方式:
let x = [|Some 1;Some 0;None;None;Some 0|]
[|for i = 0 to x.Length-1 do
if x.[i].IsNone then yield i|]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句