我有一個簡單的像這樣增量由一個for循環
let mutable index = 0
let mutable indx = 0
for c in list do
//some code
index <- indx
indx <- indx + 1
循環基本上就是我想要做的是疊代對象的列表,並在列表中搜索特定的對象,然後將索引變量設置爲我正在查找的對象的索引。
我假設它與最後一行有關,我認爲我正在增加一個indx,但它似乎不起作用。
我有一個簡單的像這樣增量由一個for循環
let mutable index = 0
let mutable indx = 0
for c in list do
//some code
index <- indx
indx <- indx + 1
循環基本上就是我想要做的是疊代對象的列表,並在列表中搜索特定的對象,然後將索引變量設置爲我正在查找的對象的索引。
我假設它與最後一行有關,我認爲我正在增加一個indx,但它似乎不起作用。
爲什麼不做突變的功能性方法?
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
如果您只是試圖找到序列中某個項目的索引,則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