我知道我可以很轻松地以强制性的方式做到这一点。我想弄清楚的是如何以功能的方式做到这一点。我觉得我应该能够通过折叠或地图来实现这一目标,但我无法解决这个问题。自从我接受函数式编程教育以来,已经有很长一段时间了。
说我有像(任意长度)的元组:
[|("X", 2);("Y", 3)|]
像一个字符串:
"X + Y"
我想要一个结果:
"2 + 3"
提前致谢。
答案 0 :(得分:3)
正如您所猜测的,您可以使用fold
:
[|("X", 2);("Y", 3)|]
|> Seq.fold (fun (str:string) (orig, repl) ->
str.Replace(orig, string repl)) "X + Y"
我们的想法是我们使用字符串作为状态(初始状态是" X + Y")。然后折叠迭代所有替换,并且对于每次替换,我们返回一个新字符串。为此,我们将orig
值替换为新值repl
,该值由str.Replace(orig, string repl)
完成。
使这一点变得棘手的一点是我们需要str
的类型注释才能调用Replace
(如果没有这个,F#就不会知道str
是一个字符串)。< / p>