F# - 将嵌套for循环转换为函数样式

D. *_*van 10 f# functional-programming

我正在尝试将嵌套的for循环转换为更实用的样式.

我一直在搞乱流水线,序列和数组,但无济于事.

这就是我所拥有的:

let allCarrierCodes = new List<string>()    
for result in getAllCarrierCodesResults do
        for carrierCode in result do
            allCarrierCodes.Add(carrierCode.ToString())
Run Code Online (Sandbox Code Playgroud)
  • getAllCarrierCodesResults 是一个类型为"obj list"的seq

什么是重写嵌套循环的好功能方法?

谢谢.

Lee*_*Lee 10

你可以使用Seq.collect:

let allCodes = Seq.collect id getAllCarrierCodesResults 
               |> Seq.map string)
Run Code Online (Sandbox Code Playgroud)

要么

let allCodes = Seq.collect (Seq.map string) getAllCarrierCodesResults
Run Code Online (Sandbox Code Playgroud)

然后,您可以将结果seq<string>转换为您想要的具体集合.


Fyo*_*kin 8

Lee的回答比这更好,但我只想提一下,你可以完全把这些嵌套循环放在列表理解中,并且瞧:

let allCarrierCodes =
  [for result in getAllCarrierCodesResults do
     for carrierCode in result do
       yield carrierCode.ToString()]
Run Code Online (Sandbox Code Playgroud)

看起来很有必要,但功能真的很棒.

此外,你应该使用string carrierCode而不是carrierCode.ToString().保护您免受NRE的伤害,并且看起来更具功能性以获得更多奖励:-)