F# 避免迭代的最佳方法
我有一根绳子F# 避免迭代的最佳方法,f#,F#,我有一根绳子 testString=“你好[1],我的名字是[2]” 我想替换它,使它等于 你好,玛丽亚,我的名字是我的。 我有一个接受字符串和替换列表的函数。然后根据需要迭代该列表 let parse testString (replacements: list<string>) = let mutable result = testString for index = 1 to replacements.Length do
testString=“你好[1],我的名字是[2]”
我想替换它,使它等于
你好,玛丽亚,我的名字是我的。
我有一个接受字符串和替换列表的函数。然后根据需要迭代该列表
let parse testString (replacements: list<string>) =
let mutable result = testString
for index = 1 to replacements.Length do
result <- result.Replace("[" + (index).ToString() + "]", replacements.[index-1])
result
parse testString ["Maria";"My"]
let parse testString(替换:列表)=
让可变结果=testString
对于索引=1的替换。长度do
结果这里有几种方法可以让你用更惯用的F#来解决这个问题:
请注意,您的代码没有什么特别的错误,F#鼓励采用混合方法来解决问题。如果您限制了可变性和“原始”迭代的范围,它们就不会有问题。在这种情况下,变量永远不会离开函数的作用域,因此它与程序的其余部分无关。这里有几种方法,您可以用更惯用的F#来解决这个问题:
请注意,您的代码没有什么特别的错误,F#鼓励采用混合方法来解决问题。如果您限制了可变性和“原始”迭代的范围,它们就不会有问题。在这种情况下,变量永远不会离开函数的作用域,因此它与程序的其余部分无关。在等待宁静的伟大响应时,如果对任何人都有用,我也找到了自己进行匹配计算器和正则表达式的方法
let parseReplacements (matchedIndex: Match) (replacements: list<string>) =
let indexString = matchedIndex.Groups.[1] |> string
let index = (indexString |> int) - 1
if index <= replacements.Length then
replacements.[index]
else
"[" + indexString + "]"
let parse input (replacements: list<string>) =
Regex.Replace(input, "\[(\d+)\]", new MatchEvaluator(fun matched -> parseReplacements matched replacements))
let parseReplacements(matchedIndex:Match)(replacements:list)=
让indexString=matchedIndex.Groups。[1]|>string
设index=(indexString |>int)-1
如果索引解析(替换匹配替换))
在等待静谧公司的大力响应的同时,我也找到了一种方法,如果对任何人都有用的话,我可以自己做match evaluator和Regex
let parseReplacements (matchedIndex: Match) (replacements: list<string>) =
let indexString = matchedIndex.Groups.[1] |> string
let index = (indexString |> int) - 1
if index <= replacements.Length then
replacements.[index]
else
"[" + indexString + "]"
let parse input (replacements: list<string>) =
Regex.Replace(input, "\[(\d+)\]", new MatchEvaluator(fun matched -> parseReplacements matched replacements))
let parseReplacements(matchedIndex:Match)(replacements:list)=
让indexString=matchedIndex.Groups。[1]|>string
设index=(indexString |>int)-1
如果索引解析(替换匹配替换))
这里第一个解析函数的忠实粉丝。但你是对的,F#实际上也有一个非常好的语法,只用于过程代码。我还得到了一个正则表达式解决方案,我把它作为一个单独的答案发布了出来,但我更喜欢你的解决方案。但你是对的,F#实际上也有一个非常好的语法,只用于过程代码。我还得到了一个正则表达式解决方案,我已经作为一个单独的答案发布了,但我更喜欢你的。