【问题标题】:Concat nesting list to string, Haskell将嵌套列表连接到字符串,Haskell
【发布时间】:2014-12-10 21:19:03
【问题描述】:

我做字符串混合:

main = do
    first <- getLine
    second <- getLine
    print (zip first second)

结果:[('a','1'),('b','2'),('c','3')]

但是我如何将结果连接到a1b2c3

【问题讨论】:

标签: haskell


【解决方案1】:

你必须做以下操作:

1) 将列表中的元组转换为单个字符串,可由单个map 执行。

2) 连接整个列表

Prelude> let a = [('a','1'),('b','2'),('c','3')]
Prelude> let b = map (\(x,y) -> x : [y]) a
Prelude> b
["a1","b2","c3"]
Prelude> concat b
"a1b2c3"
Prelude> Prelude.foldl1' (++) b -- instead of concat you can do fold
"a1b2c3"

【讨论】:

    【解决方案2】:

    你也可以在一个方便的行中做到这一点

    let a = [('a','1'),('b','2'),('c','3')]
    uncurry ((. return) . (:)) =<< a
    

    【讨论】:

      【解决方案3】:

      如果我可以添加另一个(不必要的)答案,只是为了展示 Haskell 让您思考和解决问题的方式有多少(疯狂):)

      Prelude Data.List> let input = [('a','1'),('b','2'),('c','3')]
      Prelude Data.List> let (l1,l2) = unzip input
      Prelude Data.List> let alt_stream s1 s2 = head s1:head s2:alt_stream (tail s1) (tail s2)
      Prelude Data.List> take (length l1 * 2) $ alt_stream (cycle l1) (cycle l2)
      "a1b2c3"
      

      【讨论】:

        猜你喜欢
        • 2015-01-21
        • 1970-01-01
        • 2016-02-08
        • 2018-05-14
        • 1970-01-01
        • 2021-11-25
        • 1970-01-01
        • 2021-10-21
        • 2019-01-05
        相关资源
        最近更新 更多