8

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

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

4

4 回答 4

5

我自己的建议:

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

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

于 2010-11-23T13:02:53.677 回答
4

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

Sequence asList := method (
    Range 0 to(self size - 1) map (v, self at(v) asCharacter)
)
于 2011-02-17T23:15:36.000 回答
2

一种方法是使用 Regex 插件:

#!/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
于 2010-11-23T12:25:16.613 回答
2

我有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)
于 2018-11-22T13:36:53.320 回答