这与我的previous问题类似,
但还有另一种即兴创作,如果我想跳过一些空格,代码怎么样,因为这种情况是“输入”,例如:
5 5 10
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
<- this white space
3 4 4
1 2 3 4
1 2 3 4
1 2 3 4
我尽我所能但却找不到如何跳过白色空间 谢谢你的帮助:)
这是答案,感谢拉蒙:
let readMap (path:string) =
let lines = File.ReadAllLines path
let [|x; y; n|] = lines.[0].Split() |> Array.map int
let data =
[|
for l in (lines |> Array.toSeq |> Seq.skip 1 |> Seq.filter(System.String.IsNullOrEmpty >> not)) do
yield l.Split()
|]
x,y,n,data
答案 0 :(得分:3)
编写readMap
函数的另一种方法是在列表推导中使用if
表达式。我认为如果你使用理解,这实际上更具可读性(因为你不必结合两种写东西的方式):
let readMap (path:string) =
let lines = File.ReadAllLines path
let [|x; y; n|] = lines.[0].Split() |> Array.map int
let data =
[|
for l in lines |> Seq.skip 1 do
if not (System.String.IsNullOrEmpty(l)) then
yield l.Split()
|]
x,y,n,data
我还删除了对Array.toSeq
的调用,因为F#允许你在没有显式转换的情况下在seq所在的地方使用数组(seq实际上是IEnumerable
而数组实现了它)。
答案 1 :(得分:2)
这个怎么样:
val items : string list
items
|> List.filter (System.String.IsNullOrEmpty >> not)