Как мне преобразовать строку в последовательность символов в 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()
Другие вопросы по тегам