gpt4 book ai didi

rust - 你能得到一个集合的所有值的迭代器,除了一个和对该元素的引用吗?

转载 作者:行者123 更新时间:2023-11-29 08:02:04 24 4
gpt4 key购买 nike

我想在 Vec 中迭代客户端,并使用一种方法处理每个客户端,该方法也应该将所有其他客户端作为参数。

最佳答案

据我所知,没有这样的迭代器,但创建自己的迭代器并不复杂:

struct X<'a, T: 'a> {
item: &'a T,
before: &'a [T],
after: &'a [T],
}

struct AllButOne<'a, T: 'a> {
slice: &'a [T],
index: usize,
}

impl<'a, T> AllButOne<'a, T> {
fn new(slice: &'a [T]) -> Self {
AllButOne { slice, index: 0 }
}
}

impl<'a, T> Iterator for AllButOne<'a, T> {
type Item = X<'a, T>;

fn next(&mut self) -> Option<Self::Item> {
if self.index > self.slice.len() {
return None;
}

let (before, middle) = self.slice.split_at(self.index);
let (middle, after) = middle.split_at(1);

self.index += 1;

Some(X {
before,
after,
item: &middle[0],
})
}
}

fn main() {
let a = [1, 2, 3, 4];

for x in AllButOne::new(&a) {
println!("{:?}, {}, {:?}", x.before, x.item, x.after);
}
}
[], 1, [2, 3, 4]
[1], 2, [3, 4]
[1, 2], 3, [4]
[1, 2, 3], 4, []

这将返回两个切片,一个用于当前项目之前的所有值,一个用于之后。如果需要,您可以执行分配并将它们粘贴到同一个集合中。

关于rust - 你能得到一个集合的所有值的迭代器,除了一个和对该元素的引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51351633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com