【发布时间】:2026-01-19 08:15:03
【问题描述】:
我正在尝试使用指示值类型(年度和季度)的模式字符串解析列表。我需要在结果输出中累积季度数。到目前为止,我想出了这个:
row = [100, 10, 40, 25, 25]
fmt = "aqqqq"
expected = [('a',1,100),('q',1,10),('q',2,40),('q',3,25),('q',4,25)]
count :: Char -> String -> Int
count letter str = length $ filter (== letter) str
split :: String -> [a] -> [(Char, Int, a)]
split fmt row = [(freq, count freq (fmt' i), x)
| (freq, x, i) <- zip3 fmt row [0..]]
where fmt' i = take (i+1) fmt
-- split "aqqqq" [100, 10, 40, 25, 25]
-- [('a',1,100),('q',1,10),('q',2,40),('q',3,25),('q',4,25)]
我想应该有一些比这段代码更具可读性和性能的东西,甚至是一个了不起的单行代码。
我还尝试将"aqqqq" 扩展为元组列表[('a',1),('q',1),('q',2),('q',3),('q',4)],然后添加值;也许这是一种更好的方法,因为我需要为几行指定一次格式。
【问题讨论】:
标签: list haskell count iteration