如何在 Nim 中将字符串转换为字符序列?

How do I convert a string into a sequence of characters in Nim?

我想对字符串中的字符进行不同的操作,例如映射或反向。作为第一步,我想将字符串转换为序列。

给定一个像 "ab" 这样的字符串。 我如何获得像 @['a','b']?

这样的序列

"ab".split("") returns 整个字符串。

我之前看过一个 "ab".items 的例子,但它似乎不起作用(是否已弃用?)

items 是一个迭代器,不是函数,所以你只能在一些特定的上下文中调用它(比如 for 循环)。但是,您可以使用 sequtils 模块 (docs) 中的 toSeq 从迭代器轻松构建序列。例如:

import sequtils
echo toSeq("ab".items)

您还可以使用列表理解:

import future

let
  text = "nim lang"
  parts = lc[c | (c <- text), char]

部分是 @['n', 'i', 'm', ' ', 'l', 'a', 'n', 'g']

这是使用 sequtilsmapfuture=> 的另一个变体(在 Nim 开发中重命名为 sugar):

import sequtils, sugar
echo "nim lang".map(c => c)

输出 @['n', 'i', 'm', ' ', 'l', 'a', 'n', 'g'].

一个字符串已经是一个字符序列:

assert "ab" == @['a', 'b']

import sequtils
assert "ab".mapIt(it.ord) == @[97, 98]

因为 stringseq[char] 一样实现,一个简单的转换就足够了,即

echo cast[seq[char]]("casting is formidable")

这显然是最有效的方法,因为它只是一个强制转换,尽管此处答案中概述的其他一些方法可能已由编译器对此进行了优化。

最简单的方法:

import sequtils
echo "ab".toSeq()