在循环内插入数组

Inserting into array within loop

我正在尝试创建可用经度和纬度对的数组,它们在 XML 中返回。我正在使用 F# Data 来实现它,这是我目前所拥有的。

// #r @"load data dll"

open FSharp.Data

type Html = XmlProvider<"<my-url>", Global=true>
let html = Html.GetSample()

// Create an availableList array, so that it would have pairs of available Latitude and Longitude
let availableList = Array.create

let getCoordinates available = 
  for item in html.Objects do
    if item.StatusParkPlace = available then
      // If true, push item.Latitude and item.Longitude into availableList 

let main = 
  getCoordinates true

main

我知道,第 9 行的 array 初始化不正确,我也知道第 13 行的条件 if 语句未完成。我可以按如下所示在第 14 行打印出对,但我看不出这对我有什么用:

printfn "%A - %A" item.Latitude item.Longitude

在函数式编程中,尽量避免通过遍历数据和项目到新列表来构建列表。这是命令式方法,依赖于改变共享状态。

在你的例子中考虑这样做:

let getCoordinates available = 
  html.Objects
  |> Seq.filter (fun item -> item.StatusParkPlace = available)
  |> Seq.toList

let main = 
  let availableList = getCoordinates true

还是一样的结果,从另一个序列构建一个列表。但是这次你让语言来处理它的实现,你只需提供一个你希望应用于每个项目的函数到 filter 一个列表到另一个列表。

在上面的例子中。 Seq.filter 将通过 html.Objects 执行循环,并且只有 return 项与函数匹配到新序列中。然后将其转换为将保存结果的列表(在 F# 中更喜欢列表而不是数组)。没有 toList 它只是一个 sequence 静止。