import qualified Data.HashMap.Strict as M
import qualified Data.Text as T
import qualified Data.Text.IO as T.IO
import Text.FShow.RealFloat (fshow)
main = do
dataA <- T.IO.readFile "pathA"
dataB <- T.IO.readFile "pathB"
...
let hashmap = -- process dataA and dataB
hashmapList = map (\(t1,t1Map) -> (t1, map (\(t2,float) -> (t2,fshow float)) (M.toList t1Map))) $ M.toList hashmap
hashmapString = show hashmapList
writeFile "path" hashmapString
type の hashmap (上記のコードを参照) をファイルに書き込みたいと思いM.HashMap T.Text (M.HashMap T.Text Float)
ます。hashmap を List に変換し、さらに fshow を使用して Float を効率的に表示します。Iを使用しshow
て、リストを文字列に変換し、ファイルに書き込みます。
-O2 を指定してコンパイルし、プロファイルを作成すると、次の結果が得られます。
COST CENTRE MODULE %time %alloc
main.hashmapList.\.\ Main 46.0 50.0
main.hashmapString Main 32.5 41.1
main.writeFile Main 11.9 0.2
main.hashmapList.\ Main 3.4 2.7
...
したがって、特に Map を List に変換し、List を String に変換するには、多くの時間とスペースが必要です。ハッシュマップをより効率的にファイルに書き込むにはどうすればよいですか?