2015-12-16 4 views
0

Рассмотрят У меня есть множество вариантов, как [|Some 1;Some0;None;None;Some0|] и я иду, чтобы получить индексы элементов с None значением, в данном случае правильного ответа будет [|2;3|].Попадая индексы элементов массива с определенными значениями

Моя текущая идея - изменить массив на список, а затем перебросить его с помощью рекурсивной функции, но в этом случае мне понадобится mutable value для вычисления индекса, и я не хочу использовать mutable?

Есть ли другое решение

ответ

5

Вот еще одно решение:

[|Some 1;Some 0;None;None;Some 0|] 
    |> Array.indexed 
    |> Array.filter (fun (i, x) -> x.IsNone) 
    |> Array.map fst 

А вот еще один способ использования последовательности выражений:

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|] 
+0

Спасибо, я не знал об этом ** индексным ** метод – Salman

Смежные вопросы