在循环内插入数组
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 静止。
我正在尝试创建可用经度和纬度对的数组,它们在 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 静止。