我有这个数组
let myArray = [1;2;3;5;2;7]
我想获得数字4,而不是Seq.FindIndex(fun x -> x=2) myArray
的1
我可以反转阵列。但是我希望有Seq.FindIndexReverse
函数....
有什么想法吗?
答案 0 :(得分:2)
如果反转阵列并没有为你剪掉,你自己怎么写?
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 :(得分:1)
由于不是非常“功能性”但有效的解决方案,您可以使用Array.LastIndexOf
答案 2 :(得分: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)
答案 3 :(得分:1)
现在已经很晚了,但对于遇到这个问题的其他人来说可能会有用:
在F#4.0中,为findIndexBack
,Array
和List
添加了一个名为Seq
的方法。这应该为你的功能返回4.
它没有在MSDN / GitHub上记录,但是提交在GitHub上,它出现在Visual Studio的Intellisense中。