我有這個陣列F#Seq.FindIndex從結尾開始而不是從頭開始?
let myArray = [1;2;3;5;2;7]
我想要得到的4號,而不是1 Seq.FindIndex(fun x -> x=2) myArray
我可以扭轉陣列。但我希望有一個Seq.FindIndexReverse
函數....
任何想法?
我有這個陣列F#Seq.FindIndex從結尾開始而不是從頭開始?
let myArray = [1;2;3;5;2;7]
我想要得到的4號,而不是1 Seq.FindIndex(fun x -> x=2) myArray
我可以扭轉陣列。但我希望有一個Seq.FindIndexReverse
函數....
任何想法?
由於不是很「實用」,但有效的解決方案,你可以使用Array.LastIndexOf
如果扭轉數組不剪你的,你怎麼樣寫一個自己?
let findLastIndex f arr =
let rec inner f arr idx =
match idx with
| _ when idx >= 0 ->
if f (arr.[idx])
then Some idx
else inner arr f (idx - 1)
| _ -> None
inner f arr (Array.length arr - 1)
沒有測試它,但這樣的事情應該工作。
順便說一句,你給了一個列表,而不是你的例子中的數組。您可以使用[| |]
來定義數組文字。
有對於沒有內置功能,但你可以很容易地用自己的方式結合到它:
[1;2;3;5;2;7] |> List.rev |> List.findIndex (fun x -> x = 2)
然而,這仍返回1,因爲第二到最後一個元素是也1
。
順便說一句,你的列表是列表,而不是一個陣列,但它會爲數組是類似的:
[|1;2;3;5;2;7|] |> Array.rev |> Array.findIndex (fun x -> x = 2)
什麼不功能有關?它與任何Seq,List或Array函數一樣功能,不會改變輸入。 – Jwosty
我不認爲這將與lambda一起使用 –