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

时间:2016-03-31 14:22:05

标签: f# functional-programming

我试图将嵌套的for循环转换为更实用的样式。

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

以下是我所拥有的:

let allCarrierCodes = new List<string>()    
for result in getAllCarrierCodesResults do
        for carrierCode in result do
            allCarrierCodes.Add(carrierCode.ToString())
  • getAllCarrierCodesResults是&#34; obj list&#34;
  • 类型的序列号

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

感谢。

2 个答案:

答案 0 :(得分:10)

您可以使用Seq.collect

let allCodes = Seq.collect id getAllCarrierCodesResults 
               |> Seq.map string)

let allCodes = Seq.collect (Seq.map string) getAllCarrierCodesResults

然后,您可以将生成的seq<string>转换为您想要的具体集合。

答案 1 :(得分:8)

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

let allCarrierCodes =
  [for result in getAllCarrierCodesResults do
     for carrierCode in result do
       yield carrierCode.ToString()]

看起来很有必要,但确实很有用。

此外,您应该使用string carrierCode而不是carrierCode.ToString()。保护您免受NRE的侵害,并且看起来更有用,可以获得额外的奖励: - )