Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F# 如何使用索引执行Array.tryFind?_F# - Fatal编程技术网

F# 如何使用索引执行Array.tryFind?

F# 如何使用索引执行Array.tryFind?,f#,F#,我想做的一个简单的例子是 Array.tryFind (fun elem index -> elem + index = 42) array1 //not valid 由于没有中断或继续,我发现即使在类似这样的for循环中也很难手动执行(免责声明:在浏览器中键入-可能包含错误) 与@gradbot的答案类似,您可以沿着mapi,iteri定义一个模块函数,该函数适用于数组、列表和序列 module Seq = let tryFindi fn seq = seq

我想做的一个简单的例子是

 Array.tryFind (fun elem index -> elem + index = 42) array1  //not valid
由于没有
中断
继续
,我发现即使在类似这样的for循环中也很难手动执行(免责声明:在浏览器中键入-可能包含错误)


与@gradbot的答案类似,您可以沿着
mapi
iteri
定义一个模块函数,该函数适用于数组、列表和序列

module Seq =
    let tryFindi fn seq =
        seq |> Seq.mapi (fun i x -> i, x)
            |> Seq.tryFind (fun (i, x) -> fn i x)
            |> Option.map snd

// Usage
let res = [|1;1;40;4;2|] |> Seq.tryFindi (fun i el -> i + el = 42)

每当我从内置函数中发现我需要缺少的东西时,我就添加它!我总是有一个名为
Helpers.fs
的文件,其中保存了所有这些文件。一定要给它起个好名字

module Array =
    let tryFindWithIndex fn (array : _[]) =
        let rec find index =
            if index < array.Length then
                if fn array.[index] index then
                    Some(array.[index])
                else
                    find (index + 1)
            else
                None
        find 0
输出

Some 40
[|1;1;40;4;2|]
|> Array.tryFindWithIndex (fun elem index -> elem + index = 42)
|> printf "%A"
Some 40