3
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 に変換するには、多くの時間とスペースが必要です。ハッシュマップをより効率的にファイルに書き込むにはどうすればよいですか?

4

1 に答える 1