我正在尝试学习 Rust。我最近遇到的一个问题如下:给定 a String,它正好是 n 的倍数,我想将字符串分成大小为 n 的块,并在这些块之间插入一个空格,然后收集回一个细绳。
我遇到的问题是该chars()方法返回Chars结构体,由于某种原因它没有实现SliceConcatExt特征,因此chunks()不能对其调用。
此外,一旦我成功创建了一个 Chunks 结构(通过调用.bytes()代替),我不确定如何调用 a.join(' ')因为元素现在Chunks是字节切片......
必须有一种优雅的方式来做到这一点,我错过了。
例如,这里是一个说明情况的输入/输出:
given: whatupmyname, 4
output: what upmy name
Run Code Online (Sandbox Code Playgroud)
这是我写得不好的尝试:
given: whatupmyname, 4
output: what upmy name
Run Code Online (Sandbox Code Playgroud)
感谢您的任何帮助!
我学习 Rust 是为了好玩,当编写一个返回第 n 个素数的函数时,我意识到我的解决方案感觉不优雅且浪费。
当我只想遍历其中尚未验证的部分时,我会遍历整个可能的素数列表。有没有办法在使用retain()函数时做到这一点?
我的主要问题是,我相信保留()函数是为 Vec 实现的,而不是为切片实现的。我尝试查看切片文档以获取更多想法,但找不到任何内容。
这是代码。
let mut prime_list: Vec<u32> = (2..n).collect();
let mut i: usize = 0;
while i < prime_list.len() {
let prime: u32 = prime_list[i];
prime_list.retain(
|x| x <= &prime || x % &prime != 0);
i += 1;
}
Run Code Online (Sandbox Code Playgroud)
所以问题出在函数调用上
prime_list.retain(
|x| x <= &prime || x % &prime != 0);
Run Code Online (Sandbox Code Playgroud)
每次进入此循环时,我不需要检查列表中的每个元素,因为我知道我已经验证了“i”之前的元素。
但是,retain() 函数需要遍历整个容器,因此我在其中添加了一个检查 (x <= &prime || ...) 以忽略当前元素之前的所有元素。
我想做的是优雅地从位置“i”的元素开始,然后遍历列表删除元素。
我知道我可以用不太优雅的 while 或 for 循环来做到这一点,但我希望有一种 Rust 方法可以优雅地做到这一点。
谢谢你的帮助!
编辑:这里有一个可能的解决方案,使用 splitting 和 …