Как мне преобразовать строку в последовательность символов в Nim?
Я хочу сделать различные операции с символами в строке, например, карту или наоборот. В качестве первого шага я хочу преобразовать строку в последовательность.
Дана строка типа "ab". Как мне получить последовательность, как @['a','b']
?
"ab".split("")
возвращает всю строку.
Я видел пример с "ab".items
раньше, но это, похоже, не работает (не рекомендуется?)
7 ответов
items
является итератором, а не функцией, поэтому вы можете вызывать его только в нескольких конкретных контекстах (например, for
петля). Тем не менее, вы можете легко построить последовательность из итератора, используя toSeq
от sequtils
модуль ( документы). Например:
import sequtils
echo toSeq("ab".items)
Поскольку string
реализован как seq[char]
достаточно простого приведения, т.е.
echo cast[seq[char]]("casting is formidable")
это, очевидно, наиболее эффективный подход, поскольку это просто приведение, хотя, возможно, некоторые из других подходов, изложенных в ответах здесь, оптимизируются компилятором для этого.
Вот еще один вариант использования map
от sequtils
а также =>
от future
(переименован в sugar
на ним девел)
import sequtils, sugar
echo "nim lang".map(c => c)
Выходы @['n', 'i', 'm', ' ', 'l', 'a', 'n', 'g']
,
Вы также можете использовать понимание списка:
import future
let
text = "nim lang"
parts = lc[c | (c <- text), char]
Части есть @['n', 'i', 'm', ' ', 'l', 'a', 'n', 'g']
,
Строка уже представляет собой последовательность символов:
assert "ab" == @['a', 'b']
import sequtils
assert "ab".mapIt(it.ord) == @[97, 98]
@
преобразует как массивы , так и строки в последовательности:
echo @"abc"
Вывод: @['a', 'b', 'c']
Самый простой способ сделать это:
import sequtils
echo "ab".toSeq()