2

私がやりたいことの簡単な例は

 Array.tryFind (fun elem index -> elem + index = 42) array1  //not valid

breakまたはがないのでcontinue、forループでも手動で行うのは難しいと思います

4

3 に答える 3

4

@gradbotの回答と同様に、の行に沿ってモジュール関数を定義できます。これはmapiiteri配列、リスト、およびシーケンスで機能します。

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)
于 2012-09-24T15:37:05.937 に答える
3

組み込み関数から不足しているものを見つけたときはいつでも、それを追加するだけです!私はいつもこれらすべてを保存する場所というファイルを持っています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

使用例。

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

出力

Some 40
于 2012-09-24T16:54:41.260 に答える
2

このようなもの(免責事項:ブラウザでの入力-エラーが含まれている可能性があります)

array |> Seq.mapi (fun i el -> i + el) |> Seq.tryFind ((=)42)
于 2012-09-24T15:02:31.857 に答える