给出一个像这样的元组列表:
dic = [(1,"aa"),(1,"cc"),(2,"aa"),(3,"ff"),(3,"gg"),(1,"bb")]
Run Code Online (Sandbox Code Playgroud)
如何对列表grp的dic项进行分组,其中,
grp = [(1,["aa","bb","cc"]), (2, ["aa"]), (3, ["ff","gg"])]
Run Code Online (Sandbox Code Playgroud)
我实际上是Haskell的新手......并且似乎爱上了它.在Data.List中
使用group或groupBy只会对列表中相似的相邻项进行分组.我为此编写了一个低效的函数,但由于我需要处理一个非常大的编码字符串列表,因此会导致内存故障.希望你能帮我找到更有效的方法.
import Data.List
data Encoding = Multiple Int Char | Single Char deriving (Eq,Show,Ord)
Run Code Online (Sandbox Code Playgroud)
运行长度的编码
encode :: String -> [Encoding]
encode inputString =encoding (group inputString) []
encoding :: [String] -> [Encoding] -> [Encoding]
encoding groupString xs=
if (length groupString == 0)
then xs
else
case (head groupString) of
([c]) ->encoding (tail groupString) (xs ++ [Single c])
(x) -> encoding (tail groupString) (xs ++ [Multiple (length x) (head x)])
Run Code Online (Sandbox Code Playgroud)
运行长度的解码
decode :: [Encoding] -> String
decode listString = decoding listString []
decoding …Run Code Online (Sandbox Code Playgroud) haskell ×2