如何找到数组值等于数字 fsharp 的所有索引?

Can*_*bre 0 f#

我试图找到一种方法来获取数组等于某个值的所有实例。我能够获得第一个和最后一个值,如下面的测试用例所示,但我也试图获得中间值。

let test = [|"1";"2";"4";"2";"6";"2";"9";"10"|]
test
|> Array.findIndex(fun x -> x = "2")

test
|> Array.findIndexBack(fun x -> x = "2")
Run Code Online (Sandbox Code Playgroud)

如何获取所有索引的列表?

hve*_*ter 5

这应该可以解决问题

let findAllIndexes predicate arr =
    Array.indexed arr
    |> Array.choose (fun (i, x) ->
        if predicate x then Some i else None)
Run Code Online (Sandbox Code Playgroud)

像这样使用它

test |> findAllIndexes (fun x -> x = "2")
Run Code Online (Sandbox Code Playgroud)

返回 [|1; 3; 5|]