Rust中是否有一种机制将字符串分区为等长元素列表(子字符串或元组/字符数组)?
我想取一个字符串"abcdefghijkl"
并将其拆分为["ab", "cd", "ef", "gh" "ij" "kl"]
我不需要看到手动执行此操作的方法,我只是想知道是否与Clojure的partition
平行:
user> (partition 2 "abcdefghijkl")
((\a \b) (\c \d) (\e \f) (\g \h) (\i \j) (\k \l))
答案 0 :(得分:6)
在Rust master的当前版本中(在Rust 0.9中应该保持为true),在向量和向量切片上有一个方法chunks
,它迭代向量,返回等长向量切片直到耗尽。但是,对于字符串或迭代器,通常没有任何方法可以实现此目的。
要解决此问题,请注意虽然Rust字符串本身不是Rust向量,但它们由u8
的向量支持,该向量包含字符串的UTF-8表示形式。此外,str
类型提供了获取字符串的不同视图的方法,特别是:
as_bytes
:返回底层UTF-8字节向量(&'a [u8]
)的不可变向量切片。您可以直接在此调用chunks
,但由于您在字节上进行迭代,因此只有在您知道字符串完全是ASCII时才会有效。chars
:在字符串中的Unicode代码点上返回迭代器,生成UTF-32 char
值的流。您可以使用to_owned_vec
方法将迭代器生成的值复制到拥有的堆分配的向量中,您可以在该方法上运行chunks
。
编辑:最初声称在Rust 0.8中存在chunks
。实际上,方法名称为chunk_iter
。有关更多详细信息,请参阅注释。