【问题标题】:How do I convert a string to a list in Io?如何在 Io 中将字符串转换为列表?
【发布时间】:2010-11-23 10:34:39
【问题描述】:

例如,我想将"hello" 变成list(104, 101, 108, 108, 111)list("h", "e", "l", "l", "o")

到目前为止,我已经创建了一个空列表,使用了 foreach 并自己将每个项目附加到列表中,但这并不是一种真正简洁的方法。

【问题讨论】:

  • 真的不想知道将字符串转换为 hel 语言中的列表需要经历什么。 ;-)
  • lol.. 如果我创造了一种相当严肃的编程语言,我保证将它命名为 Hel :)
  • 离题但与这里的 Io 问题相关。我回滚了你最近所做的标签编辑,因为iolanguage 是 Io 的规范标签。
  • 顺便说一句,好问题!让我挠了挠头。我认为asList 是核心Sequence 对象的一个​​很好的补充。
  • 很遗憾,"hello" split"world" split("") 都没有按预期工作。

标签: string list sequence iolanguage


【解决方案1】:

我自己的建议:

Sequence asList := method(
  result := list()
  self foreach(x,
    result append(x)
  )
)

尚未对其性能进行测试,但避免使用正则表达式应该可以解决问题。

【讨论】:

  • 是的 foreach 会更高效。但是,它不太简洁。希望有一个简洁的高性能解决方案吗?
  • 在其中一个测试中使用了与此方法类似的东西(参见 byteList):github.com/stevedekorte/io/blob/master/libs/iovm/tests/…
  • 一点加速:result := list() preallocateToSize(self size)
  • 对我来说这不会执行,我将其更改为Sequence asList := method( result := List; self foreach(x, result append(x)))。差异并不大,但对于像我这样不熟悉 Io 语法和运行时错误消息的人来说,很难找到它失败的原因......
【解决方案2】:

另一个非常简洁但不幸的是比foreach 解决方案慢的是:

Sequence asList := method (
    Range 0 to(self size - 1) map (v, self at(v) asCharacter)
)

【讨论】:

    【解决方案3】:

    一种方法是使用正则表达式插件:

    #!/usr/bin/env io
    
    Regex
    
    myList := "hello" allMatchesOfRegex(".") map (at(0))
    

    但我确信一定有其他(甚至可能更好!)方法。


    更新 - 回复:我的评论有问题。在 Sequence 对象中内置一些东西会很好。例如:

    Sequence asList := method (
        Regex
        self allMatchesOfRegex(".") map (at(0))
    )
    
    # now its just
    myList := "hello" asList
    

    【讨论】:

    • 这是一个创造性的解决方案,但不是更好,不是:)
    • 它比 foreach 更好,因为它的构造过程中没有 kittens^h^h^h^h^h^h^h 变量被伤害或杀死:)
    • 显然没有多少 io-folks 在 stackoverflow 上闲逛(或任何地方)。 +1 热情:)
    • 这已经过时了。虽然,我找不到任何关于如何实际包含附加组件的答案。我究竟如何添加正则表达式模块。
    • @Rig - 正则表达式插件随 Io 一起提供。过去编译时出现过问题,但我认为它已修复(虽然我有一段时间没有尝试过!)。
    【解决方案4】:

    我有 Io Programming Language, v. 20110905 和方法 asList 是默认定义的,所以你可以使用它无需任何新定义。然后就可以通过map方法获取字符码了。

    Io 20110905
    Io> a := "Hello World"
    ==> Hello World
    Io> a asList
    ==> list(H, e, l, l, o,  , W, o, r, l, d)
    Io> a asList map(at(0))
    ==> list(72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100)
    

    【讨论】:

      猜你喜欢
      • 2011-08-22
      • 2013-02-28
      • 2023-02-23
      • 1970-01-01
      • 2023-01-28
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多