【问题标题】:Haskell - How do I convert an array of Char's to a single String [duplicate]Haskell - 如何将字符数组转换为单个字符串 [重复]
【发布时间】:2017-10-01 23:44:15
【问题描述】:

我需要转换 Char 的列表 例如:["a","b","c"] 成一个字符串 例如:“abc”

我尝试过的方法不起作用 - 它返回“模式解析错误”。 这是我的代码:

listToString :: [Char] -> String
listToString [] = ""
listToString x:xs = x ++ listToString xs

感谢您的帮助!

【问题讨论】:

  • String[Char] 的类型别名。无需转换。 listToString = id
  • 从技术上讲,'x:xs' 是一个复合模式,应该放在括号中:listToString (x:xs) = ...。此外,在此等式的右侧,您尝试连接单个CharString。更不用说您的 listToString 实际上是慢速 id 为字符串定义的。
  • 如果你愿意,你可以使用 id
  • 一些术语修复/建议可帮助您学习和搜索解决方案。 1. 你说的是“一个字符数组”,但列表不是数组。 2 您说“Char 的前任列表:["a","b","c"],但这是 Strings 的列表 - Char 的列表将是 ['a', 'b', 'c'],它与 "abc" 的值相同,因为字符串是字符列表。3. 你的解析器错误只是缺少括号,请尝试listToString (x:xs) = ...。 4. 如果要将字符串列表转换为单个字符串,请使用concat
  • 由于上述混淆,我将投票结束。随意编辑问题。也许澄清 1. 你在谈论列表而不是数组。 2.你说的是字符串列表还是字符列表?

标签: list haskell


【解决方案1】:

正如 atc 正确提到的,String 只是 [Char] 的同义词

这就是为什么["a", "b", "c"]的类型是[[Char]],和[String]一样。

因此您可以使用concat 转换字符串列表:

concat ["a", "b", "c"]

结果

"abc"

如果你有一个字符列表,定义如下:

['a', 'b', 'c'] :: [Char] -- (single quotes: Char, double quotes: String)

不需要转换,因为和这个是一样的

"abc" :: String

【讨论】:

    【解决方案2】:

    在 Haskell 中,String[Char],因此您无需转换它们。

    GHC.Base 将其定义为:

    type  String = [Char]
    

    它会自动从Prelude 提供给您(您不需要导入)。

    例如:

     ['1','2','3','4'] == "1234"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-22
      • 1970-01-01
      • 2013-12-05
      • 2013-06-05
      • 2020-08-22
      • 1970-01-01
      • 1970-01-01
      • 2012-07-24
      相关资源
      最近更新 更多