3

这是我第一次在 F# 中进行 a) 函数式编程 b)。

基本上磁盘上有许多文件(n > 50);每个文件存储仪器的读数和读取该读数的时间的时间戳。问题是要根据时间戳对所有文件中的所有读数进行排序。

注意文件很大。每个文件超过 10,000 个条目。

File 1: <12:00, XXX> ; <15:30, XXX> ; <18:20, XXX> ;

File 2: <10:45, XXX> ; <16:20, XXX> ; <16:55, XXX> ;

File 3: <17:50, XXX> ;

第一个 n00b 的事情是在 N 的夹子中获取所有文件中的所有条目,然后使用 F# 的内置排序事物之一。如果我们从每个文件中取出“1”的块,那么File 3: <17:50, XXX>在取出下一个块时将是未排序的。为了解决这个问题,我们打算检查一个块中的最低和最高时间戳值,并测试它们是否位于前一个或后一个块的范围内。

基本上我仍然在以一种命令式的方式思考(几乎十年的 C 语言就是这样做的)。最近,我玩弄了一种使用 MailboxProcessor 的生产者-消费者方法。

来自经验丰富的 F# 程序员,是否有任何“功能性”和更好的方法来使用 F# 并行排序多文件时间戳?

4

1 回答 1

1

假设文件不是太大,您可以执行以下操作:

seq {
  for path in files do
    yield! File.ReadAllLines(path)
}
|> Seq.map parseTimestamp
|> Seq.sort
于 2012-05-27T03:05:12.317 回答