我是F#和一般函数编程的新手。给定一个场景,您要遍历一个序列或字符串列表,然后使用一个累加器将其映射到其他类型的新列表,那么正确的功能方法是什么?我可以使用可变变量在F#中实现此目标,但是我一直在努力寻找合适的函数来实现此目的。我认为它类似于地图,但是有状态的概念。
换句话说,我想将字符串列表转换为win形式单选按钮列表,但是对于每个新按钮,我想在前一个y坐标上加上20。就像是:
new RadioButton(Text=str,Location=new Point(20,y+20),Width=350)
您可以使用List.fold
:
open System.Drawing
open System.Windows.Forms
let getButtons () =
let strings = ["a"; "b"; "c"]
let (_, pointsRev) = List.fold (fun (offset, l) s -> (offset+20, (new RadioButton(Text=s, Location = new Point(20, offset), Width = 350))::l)) (0, []) strings
pointsRev |> List.rev
状态是一对,其中包含当前偏移量和当前输出列表。输出列表的构建顺序相反,因此必须在最后将其反转。
您也可以使用Seq.map2:
let points = Seq.map2 (fun offset s -> new RadioButton(Text=s, Location = new Point(20, offset)) (Seq.initInfinite ((*)20)) strings |> List.ofSeq
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句