微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

解析文件中每一行的 Julia 迭代器

如何解决解析文件中每一行的 Julia 迭代器

我是 Julia 的新手,并且遇到了一些我认为应该是常见情况的事情:

我想要一个迭代器,一次解析一个文本文件。所以,就像 eachline(f) 一样,除了函数 parse 应用于每一行。如果您愿意,可以调用结果 eachline(parse,f)(例如带有额外函数参数的 open 版本):将 parse 映射到 eachline

更具体地说:我有一个函数 poset(s::String)一个偏序集的字符串表示转换为一个偏序集:

function poset(s::String)
    nums = split(s)
    ...
    return transitiveclosure(g)
end

现在我想说一些类似的话

open("posets7.txt") do f
    for p in eachline(poset,f)
        #something
    end
end

(我特别需要它作为迭代器:我的文件相当大,所以我真的想一次解析它们)。

解决方法

我想我会(个人)在这种情况下使用 Iterators.map

open("posets7.txt") do f
    for p in Iterators.map(poset,eachline(f))
        # do something
    end
end

但是,正如文档所述(以及您自己发现的),这等效于使用 generator expression

open("posets7.txt") do f
    for p in (poset(x) for x in eachline(f))
        # do something
    end
end

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。