Roy*_*oyM 1 optimization haskell data-structures
我试图匹配字典中的单词,不区分大小写.我最初的方法是这样的:
是否有更好(更有效)的方法来实现这一目标?我是Haskell的新手.
import System.IO
import Data.Text (toLower, pack, unpack)
import Data.Set (fromList, member)
main = do
let path = "/usr/share/dict/american-english"
h <- openFile path ReadMode
hSetEncoding h utf8
contents <- hGetContents h
let mySet = (fromList . map (unpack . toLower . pack) . lines) contents
putStrLn $ show $ member "acadia" mySet
Run Code Online (Sandbox Code Playgroud)
我只是Text直接使用而不是转换为/从字符串.
Data.Text.IO包含的版本hGetContents,readFile等用于读取文件中的文本,并Data.Text具有lines文本.
{-# LANGUAGE OverloadedStrings #-}
import System.IO
import qualified Data.Text as T
import qualified Data.Text.IO as T
import qualified Data.Set as S
main = do
let path = "/usr/share/dict/american-english"
h <- openFile path ReadMode
hSetEncoding h utf8
contents <- T.hGetContents h
let mySet = (S.fromList . map T.toLower . T.lines) contents
putStrLn $ show $ S.member "acadia" mySet
Run Code Online (Sandbox Code Playgroud)
通过使用T.tolower和T.lines我们避免了明确的包/解压电话.
mySet现在是一组Text值而不是字符串.通过使用OverloadedStrings编译指示,文字"acadia"将被解释为Text值.