【问题标题】:Haskell string to list [duplicate]Haskell字符串列出[重复]
【发布时间】:2011-04-15 16:37:50
【问题描述】:

可能重复:
convert string list to int list in haskell

我有一个字符串12345。如何以[1,2,3,4,5] 之类的列表形式显示它?如果我有一个像##%% 这样的字符串怎么办?我无法将其转换为Int[#,#,%,%]的形式如何查看?

【问题讨论】:

  • 这些不是重复的。一种是将字符串转换为列表,另一种是将字符串列表转换为列表。
  • 在 Haskell 中“12345”实际上是 ['1','2','3','4','5']。这是你想要的还是 ["1","2","3","4","5"]?

标签: list haskell


【解决方案1】:

您应该将函数 read x::Int 映射到字符串的每个元素作为字符列表:

map (\x -> read [x]::Int) "1234"

如果你有非数字字符,你应该先过滤它:

import Data.Char
map (\x -> read [x]::Int) (filter (\x -> isDigit x) "1234##56")

结果:

[1,2,3,4,5,6]

【讨论】:

  • 这行得通,但是如果我有一个像 "##%%" 这样的字符串呢?
  • 这表示字符串是由数字组成的。如果要过滤不是数字的字符,则应使用过滤器。我会编辑答案
  • 我也改变了我的问题。其实我不想拆分非数字。我想以列表形式查看它们。
【解决方案2】:
import Data.Char (digitToInt)

map digitToInt "12345"

【讨论】:

    【解决方案3】:

    使用intersperse

    myShow :: String -> String
    myShow s = concat ["[", intersperse ',' s, "]"]
    

    【讨论】:

      【解决方案4】:

      你看过这个答案吗? Convert string list to int list

      毕竟,字符串只是 Haskell 中的字符列表。 :)

      【讨论】:

      • 我检查过了,但是当我尝试转换像 "&%" 这样的字符串时,它会给出解析错误。
      【解决方案5】:

      尝试使用长度为 1 的splitEvery

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-18
        • 2021-11-29
        • 2013-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多