f# - 循环遍历数组

mas*_*nix 3 f#

我决定把f#作为我的函数式语言.

我的问题:在文件中给出一堆50个数字,得到每行总和的前10位数.(对于那些知道的人来说是欧拉问题)

例如(简化):1234567890

总和是45
第一个"十"数字或在我们的例子中"第一"数字是4.

继承了我的问题,我读了我的数字文件,我可以用"\n"分割它,现在我有每一行,然后我尝试将它转换为一个char数组,但问题来了.我无法访问该数组的每个元素.

let total =
    lines.Split([|'\n'|])
    |> Seq.map  (fun line -> line.ToCharArray())
    |> Seq.take 1
    |> Seq.to_list  
    |> Seq.length
Run Code Online (Sandbox Code Playgroud)

我得到每一行,将其转换为数组,我采取第一个数组(仅用于测试),我尝试将其转换为列表,然后获取列表的长度.但是这个长度是我有多少个数组的长度(即1).它应该是50,因为数组中有多少元素.

有谁知道如何管道它来访问每个char?

mas*_*nix 5

我的最终答案:

let total =
    lines.Split([|'\n'|])
    |> Seq.map (fun line -> line.ToCharArray() |> Array.to_seq)      
    |> Seq.map (fun eachSeq -> eachSeq 
                               |> Seq.take 50 //get rid of the \r
                               |> Seq.map (fun c -> Double.Parse(c.ToString()))
                               |> Seq.skip 10
                               |> Seq.sum                                
                               )
    |> Seq.average
Run Code Online (Sandbox Code Playgroud)

是我最终得到的并且它正在工作:)。

基本上在我将其转换为 charArray 之后,我将其设为一个序列。所以现在我有一个序列序列。然后我可以遍历每个序列。


dah*_*byk 5

Seq.take还在回来seq<char array>.只获得您可以使用的第一个数组Seq.nth 0.