list - 输出一个元素我想要的次数

标签 list haskell

我有这个代码:

lado ::  [([Char],Int)] -> [[Char]]
lado xs = [a | (a,b) <- xs]

我需要输出这个:

> lado [("A",3),("B",2),("C",1)]
["A","B","C","A","B","A"]

我必须输出 "A"3 次,然后输出 "B"2 次,然后输出 "C"1 次,但我只能用这段代码得到这个 ["A","B","C"]。

最佳答案

您可以使用递归来完成此操作:

lado :: [(a, Int)] -> [a]
-- base case
lado [] = []
-- take each of the non-zero elements then recurse
lado xs = map fst nonzero ++ lado subtracted
    where
        -- find elements with non-zero count
        nonzero = filter (\x -> snd x > 0) xs
        -- subtract one from the count for each of those elements
        subtracted = map (\(x, n) -> (x, n - 1)) nonzero

关于list - 输出一个元素我想要的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64189254/

相关文章:

Haskell 类型长度 + 1

haskell - 未装箱类型和严格性之间有什么关系?

python - 如何根据给定条件将字符串转换为二维列表

python - 如何知道变量是否在列表中对象的属性中?

haskell - OpenCL 准引用

c - 在 Haskell 中键入 : Passing a number that looks fractional, 但始终是整数(类型别名)

python - 在 Python 中,如何找到给定列表的子项的索引?

c++ - 查找由链表链接的数据的各个地址。 C++

python - 检测列表中的相同值

haskell - haskell 中的函数类似于 catMaybes,但类型为 [Maybe a] -> Maybe [a]