我知道我可以很容易地以命令式的方式做到这一点。我想弄清楚的是如何用函数的方式来做这个。我觉得我应该可以用折叠或映射来完成这个,但我就是想不出来。我已经很久没有接受函数式编程的教育了。
假设我有这样的元组(任意长度):
[|("X", 2);("Y", 3)|]
和像
这样的字符串"X + Y"
我想要的结果是:
"2 + 3"
提前感谢。
正如您正确猜测的那样,您可以使用fold
:
[|("X", 2);("Y", 3)|]
|> Seq.fold (fun (str:string) (orig, repl) ->
str.Replace(orig, string repl)) "X + Y"
这个想法是我们使用字符串作为状态(初始状态是"X + Y")。然后,fold遍历所有替换项,对于每个替换项,我们返回一个新字符串。要做到这一点,我们将orig
的值替换为repl
的新值,这是由str.Replace(orig, string repl)
完成的。
让这个问题变得棘手的是,为了调用Replace
,我们需要str
的类型注释(没有这个,f#将不知道str
是一个字符串)。