在for循环中增加1

时间:2014-01-23 13:39:43

标签: f#

我有一个像这样的简单for循环

let mutable index = 0
let mutable indx = 0
for c in list do 
    //some code
    index <- indx
    indx <- indx + 1

基本上我想做的是遍历对象列表并在列表中搜索特定对象,然后将索引变量设置为我正在寻找的对象的索引。

我假设它与最后一行有关,我认为我将indx加1,但它似乎不起作用。

2 个答案:

答案 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