小编Zek*_*eke的帖子

如何在 Rust 中将字符串拆分为块以插入空格

我正在尝试学习 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)

感谢您的任何帮助!

string chunks rust

9
推荐指数
1
解决办法
5759
查看次数

在 Rust 中,有没有办法只对容器的一部分执行retain()?

我学习 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 和 …

primes vector rust

5
推荐指数
1
解决办法
3401
查看次数

标签 统计

rust ×2

chunks ×1

primes ×1

string ×1

vector ×1