私がやりたいことの簡単な例は
Array.tryFind (fun elem index -> elem + index = 42) array1 //not valid
break
またはがないのでcontinue
、forループでも手動で行うのは難しいと思います
私がやりたいことの簡単な例は
Array.tryFind (fun elem index -> elem + index = 42) array1 //not valid
break
またはがないのでcontinue
、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
使用例。
[|1;1;40;4;2|]
|> Array.tryFindWithIndex (fun elem index -> elem + index = 42)
|> printf "%A"
出力
Some 40
このようなもの(免責事項:ブラウザでの入力-エラーが含まれている可能性があります)
array |> Seq.mapi (fun i el -> i + el) |> Seq.tryFind ((=)42)