Как мне преобразовать строку в список в Io? - PullRequest
8 голосов
/ 23 ноября 2010

Например, я бы хотел превратить "hello" в list(104, 101, 108, 108, 111) или list("h", "e", "l", "l", "o")

До сих пор я создал пустой список, использовал foreach и добавил каждый элемент в списоксам, но это не совсем краткий способ сделать это.

Ответы [ 4 ]

5 голосов
/ 23 ноября 2010

Мое собственное предложение:

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

Не тестировал его с точки зрения производительности, но отказ от регулярного выражения должен что-то объяснять.

4 голосов
/ 18 февраля 2011

Еще одно изящное, но, к сожалению, медленное, чем решение foreach:

Sequence asList := method (
    Range 0 to(self size - 1) map (v, self at(v) asCharacter)
)
2 голосов
/ 23 ноября 2010

Одним из способов было бы использовать Regex addon:

#!/usr/bin/env io

Regex

myList := "hello" allMatchesOfRegex(".") map (at(0))

Но я уверен, что должны быть другие (и, возможно, даже лучше!) Способы.


Обновление - re: мой комментарий под вопросом.Было бы неплохо иметь что-то встроенное в объект Sequence.Например:

Sequence asList := method (
    Regex
    self allMatchesOfRegex(".") map (at(0))
)

# now its just
myList := "hello" asList
0 голосов
/ 22 ноября 2018

У меня есть 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)
...