2014-01-23 99 views
0

我有一個簡單的像這樣增量由一個for循環

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

循環基本上就是我想要做的是疊代對象的列表,並在列表中搜索特定的對象,然後將索引變量設置爲我正在查找的對象的索引。

我假設它與最後一行有關,我認爲我正在增加一個indx,但它似乎不起作用。

回答

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 
2

如果您只是試圖找到序列中某個項目的索引,則plinth具有慣用的解決方案。但我想我會解釋爲什麼你的方法不行。在F#中,沒有辦法提前退出循環(即沒有0​​/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