Rust中是否有一种机制将字符串分区为等长元素列表(子字符串或元组/字符数组)?
我想取一个String "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))
telotortium.. 6
在Rust master的当前版本中(在Rust 0.9中应该保持为真),chunks
在向量和向量切片上有一个迭代向量的方法,返回等长向量切片直到耗尽.但是,对于字符串或迭代器,通常没有任何方法可以实现此目的.
要解决此问题,请注意虽然Rust字符串本身不是Rust矢量,但它们由u8
包含字符串的UTF-8表示的向量支持.此外,str
类型提供了获取字符串的不同视图的方法,特别是:
as_bytes
:返回基础UTF-8字节向量(&'a [u8]
)的不可变向量切片.您可以chunks
直接调用此方法,但由于您正在迭代字节,因此只有在您知道字符串完全是ASCII时才会起作用.
chars
:返回字符串中Unicode代码点的迭代器,生成UTF-32 char
值的流.
您可以使用to_owned_vec
可以运行的方法将迭代器生成的值复制到拥有的堆分配向量中chunks
.
编辑:这最初声称chunks
存在于Rust 0.8中.实际上,方法名称是chunk_iter
.有关详细信息,请参阅注释.
在Rust master的当前版本中(在Rust 0.9中应该保持为真),chunks
在向量和向量切片上有一个迭代向量的方法,返回等长向量切片直到耗尽.但是,对于字符串或迭代器,通常没有任何方法可以实现此目的.
要解决此问题,请注意虽然Rust字符串本身不是Rust矢量,但它们由u8
包含字符串的UTF-8表示的向量支持.此外,str
类型提供了获取字符串的不同视图的方法,特别是:
as_bytes
:返回基础UTF-8字节向量(&'a [u8]
)的不可变向量切片.您可以chunks
直接调用此方法,但由于您正在迭代字节,因此只有在您知道字符串完全是ASCII时才会起作用.
chars
:返回字符串中Unicode代码点的迭代器,生成UTF-32 char
值的流.
您可以使用to_owned_vec
可以运行的方法将迭代器生成的值复制到拥有的堆分配向量中chunks
.
编辑:这最初声称chunks
存在于Rust 0.8中.实际上,方法名称是chunk_iter
.有关详细信息,请参阅注释.