首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何快速迭代文件生成列表

如何快速迭代文件生成列表
EN

Stack Overflow用户
提问于 2013-11-29 12:29:42
回答 2查看 110关注 0票数 1

我来自c#和python背景,我觉得一定有更好的方法来读取文件和填充经典的F#列表。但是,我知道f#列表是不可变的。必须有使用List<string>对象并调用其Add方法的替代方法。

到目前为止,我手头的情况是:

代码语言:javascript
复制
let ptr = new StreamReader("stop-words.txt")
let lst = new List<string>()
let ProcessLine line =
    match line with
    | null -> false
    | s -> 
        lst.Add(s)
        true
while ProcessLine (ptr.ReadLine()) do ()   

如果我用python编写类似的东西,我会这样做:

代码语言:javascript
复制
[x[:-1] for x in open('stop-words.txt')]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-29 12:58:04

简单解

代码语言:javascript
复制
    System.IO.File.ReadAllLines(filename) |> List.ofArray

尽管您可以编写递归函数

代码语言:javascript
复制
let processline fname =
    let file = new System.IO.StreamReader("stop-words.txt")
    let rec dowork() =
        match file.ReadLine() with
        |null -> []
        |t -> t::(dowork())
    dowork()
票数 2
EN

Stack Overflow用户

发布于 2013-11-29 12:56:50

如果希望读取文件中的所有行,只需使用ReadAllLines即可。该方法将数据作为数组返回,但您可以使用List.ofArray轻松地将其转换为List.ofArray列表,也可以使用Seq模块中的函数处理它:

代码语言:javascript
复制
open System.IO

File.ReadAllLines("stop-words.txt")

或者,如果不希望将所有内容读入内存,则可以使用File.ReadLines来延迟读取行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20285858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档