我有一个像这样的简单for循环
let mutable index = 0
let mutable indx = 0
for c in list do
//some code
index <- indx
indx <- indx + 1
基本上我想做的是遍历对象列表并在列表中搜索特定对象,然后将索引变量设置为我正在寻找的对象的索引。
我假设它与最后一行有关,我认为我将indx加1,但它似乎不起作用。
答案 0 :(得分:5)
为什么不进行没有突变的功能方法?
let my_predicate item = // some condition on item
let index = list |> Seq.findIndex my_predicate
// index will be bound to the first item in list for which my_predicate returns true
答案 1 :(得分:2)
如果你只想找到一个序列中某个项目的索引,那么plinth就有了惯用的解决方案。但我想我会解释为什么你的方法不起作用。在F#中,无法提前退出循环(即,没有break
/ continue
)。通常,您将使用递归来完成此任务:
let tryFindIndex f list =
let rec loop i = function
| [] -> None
| head::tail when f head -> Some i
| _::tail -> loop (i + 1) tail
loop 0 list
//Usage
[1; 2; 3; 4; 5] |> tryFindIndex (fun x -> x = 3)
> val it : int option = Some 2