Racket で大きな csv ファイルから日付を解析しようとしています。
これを行う最も簡単な方法は、新しいdate
構造体を作成することです。week-day
ただし、パラメータとパラメータが必要year-day
です。もちろん、私はこれらを持っていません。これはdate
、私が理解していないモジュールの本当の弱点のようです。
そのため、代わりにfind-seconds
、生の日付値を秒に変換し、それを に渡すことにしましたseconds->date
。これは機能しますが、非常に遅いです。
(time
(let loop ([n 10000])
(apply find-seconds '(0 0 12 1 1 2012)) ; this takes 3 seconds for 10000
;(date 0 0 12 1 1 2012 0 0 #f 0) ; this is instant
(if (zero? n)
'done
(loop (sub1 n)))))
find-seconds
10000 の値を処理するのに 3 秒かかり、数百万あります。もちろん、構造体の作成はdate
瞬時に行われますが、曜日、年の値はありません。
私の質問は次のとおりです。
1.)日付構造体の作成にweek-day
/が必要なのはなぜですか?year-day
2.)find-seconds
これほど遅いはずですか (つまり、バグですか)? それとも私は何か間違ったことをしていますか?
3.) 日付を高速に解析する代替手段はありますか。関数があることは知っsrfi/19
ていstring->date
ますが、ラケットの組み込み構造体ではなく、そのモジュールの構造体を使用するようにすべてを変更する必要があります。また、find-seconds の同じパフォーマンス ヒットが発生する可能性がありますが、わかりません。