小编Per*_*ker的帖子

是否可以在外国类型上实现特征?

我想实现向量与标量的频繁数学乘法:k * v = (k * v0, k * v1, k* v2..)。代码如下:

#[derive(Debug)]
struct V(Vec<i32>);

impl std::ops::Mul<V> for i32 {
    type Output = V;
    fn mul(self, v: V) -> V {
        V(v.0.iter().map(|v| v * self).collect())
    }
}

fn main() {
    let v = V(vec![1,2]);
    println!("{:?}", 3 * v);
}
Run Code Online (Sandbox Code Playgroud)

这个解决方案有效,但是我想避免结构 V 的定义,而是编写类似的代码:

impl std::ops::Mul<Vec<i32>> for i32 {
    type Output = Vec<i32>;
    fn mul(self, v: Vec<i32>) -> Vec<i32> {
        v.iter().map(|v| v * self).collect()
    }
}
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误:

 only traits defined …
Run Code Online (Sandbox Code Playgroud)

traits rust

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

获取向量中满足条件的所有索引

我想知道是否有可能获得满足 Rust 向量数据类型中的条件的所有索引。我知道特征运算符提供了一种方法来查找执行此操作的第一个元素:

let test=vec![1,0,0,1,1];
let index = test.iter().position(|&r| r == 1);
println!("{}",index) //0
Run Code Online (Sandbox Code Playgroud)

但是,我有兴趣获得测试向量中等于 1 的所有索引。

let test=vec![1,0,0,1,1];
let indexes =  //Some Code
println!("{:?}",indexes) //0,3,4
Run Code Online (Sandbox Code Playgroud)

我应该怎么办?

vector rust

4
推荐指数
1
解决办法
3101
查看次数

标签 统计

rust ×2

traits ×1

vector ×1