[Rust] 求Vec中的最值、统计特定值的数量和统计数组总和

一、简介

本文以Vec<i32>为例,介绍了在Rust中如何求 Vec<T>容器中中最大值最小值,如何确定特定值的下标、如何统计其中特定值的数量统计数组元素的总和

二、代码

0. Rust 中 Vec<T> 是什么?

在Rust中 Vec<T>为动态数组类型,跟C++中的vector<T>容器类似。对Vec<T>的详细介绍不是本文的主要内容,因此本文在此只简单介绍几种Vec<T>初始化的方法。

fn main() {
    // 1. 使用 Vec::new() 初始化
    let mut a: Vec<i32> = Vec::new();
    for i in 0..5 {
        a.push(i);
    }
    println!("a:{:?}", a);
    // 2. 使用 vec![] 宏 初始化 b = [0,1,2,3,4]
    let b: Vec<i32> = vec![0, 1, 2, 3, 4];
    println!("b:{:?}", b);
    // 3. 使用 vec![] 宏 初始化 b = [0,0,0,0,0]
    let c: Vec<i32> = vec![0; 5];
    println!("c:{:?}", c);
}

运行结果如下:

a:[0, 1, 2, 3, 4]
b:[0, 1, 2, 3, 4]
c:[0, 0, 0, 0, 0]

1. 求 Vec<T> 中的最大值、最小值

fn main() {
    let a = vec![0, 1, 2, 4, 5, 6, 7, 8, 9];
    let max_val = match a.iter().max() {
        Some(max_val) => max_val,
        _ => panic!("Failed to get maximum value of vec."),
    };
    println!("The maximum value of vec a is {}.", max_val);

    let min_val = match a.iter().min() {
        Some(min_val) => min_val,
        _ => panic!("Failed to get minimum value of vec."),
    };
    println!("The minimum value of vec a is {}.", min_val);
}

运行结果如下:

The maximum value of vec a is 9.
The minimum value of vec a is 0.

2. 求 Vec<T> 中的特定值的下标

fn main() {
    let a = vec![0, 1, 2, 4, 5, 6, 7, 8, 9];
    // 查找 值为"6"的第一个下标
    let index = match a.iter().enumerate().find(|(_, &x)| x == 6) {
        Some(enum_val) => enum_val.0,
        _ => panic!("asd"),
    };
    println!("The index of target value is :{}", index);
}

运行结果如下:

The index of target value is :5

3. 统计 Vec<T> 中特定值的数量

fn main() {
    let a = vec![0, 1, 1, 1, 5, 6, 7, 8, 9];
    // 统计 a 中值为"1"的元素个数
    let count = a.iter().filter(|&&x| x==1).count();
    println!("The number of target value is :{}", count);
}

运行结果如下:

The number of target value is :3

4. 统计 Vec<T> 中元素的总和

fn main() {
    let a = vec![0, 1, 1, 1, 5, 6, 7, 8, 9];
    let sum_a: i32 = a.iter().sum(); // 必须指定 sum_a 的数据类型,因为 sum() 作为一个 trait,并不是 Vec<f32> 的 method,无法确定最终总和的数据类型
    println!("The sum of vec a is {}.", sum_a);

    let b = vec![0.0f32, 1.0f32, 2.0f32, 3.0f32, 4.0f32];
    let sum_b: f32 = b.iter().sum(); // 必须指定 sum_b 的数据类型,因为 sum() 作为一个 trait,并不是 Vec<f32> 的 method,无法确定最终总和的数据类型
    println!("The sum of vec b is {}.", sum_b);
}

运行结果如下:

The sum of vec a is 38.
The sum of vec b is 10.

三、参考

[1.] OpenAi-ChatGPT

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值