使用Rust计算平均数、中位数和众数
在这篇文章中,我们将展示如何使用Rust编程语言来计算一个整数列表的平均数、中位数和众数。让我们先看一下完整的代码,然后逐步解释每个部分的功能。
use std::collections::HashMap;
fn main() {
// 定义一个包含整数的向量
let mut v = vec![1, 2, 4, 5, 6];
let lens = v.len();
let mut num_size = 0;
// 计算平均数
for i in v.iter() {
num_size += i;
}
println!("平均数: {}", num_size as f64 / lens as f64);
// 计算中位数
v.sort(); // 排序
let median = if lens % 2 == 1 {
// 如果是奇数,则中位数为中间那个数
v[lens / 2]
} else {
// 如果是偶数,则中位数为中间两个数的平均值
(v[lens / 2] + v[lens / 2 - 1]) / 2
};
println!("中位数: {}", median);
// 定义一个新的向量用于计算众数
let v = vec![1, 2, 4, 5, 6, 5];
let mut scores = HashMap::new();
for element in &v {
*scores.entry(element).or_insert(0) += 1;
}
// 打印 HashMap 以验证结果
for (key, value) in &scores {
println!("{}: {}", key, value);
}
// 找到出现次数最多的元素(众数)
let mut max_count = 0;
let mut mode = None;
for (key, count) in &scores {
if *count > max_count {
max_count = *count;
mode = Some(*key);
}
}
match mode {
Some(key) => println!("众数: {}", key),
None => println!("没有众数"),
}
}
解释
计算平均数
首先,我们定义了一个包含整数的向量 v
并计算它的长度 lens
。然后通过迭代向量中的每一个元素来累加它们的总和:
let mut num_size = 0;
for i in v.iter() {
num_size += i;
}
println!("平均数: {}", num_size as f64 / lens as f64);
在打印平均数时,我们将总和 num_size
和长度 lens
转换为浮点数,以确保结果是一个浮点数。
计算中位数
接下来,通过对向量 v
进行排序来计算中位数:
v.sort();
let median = if lens%2 == 1 {
v[lens / 2]
} else {
(v[lens / 2] + v[lens / 2 - 1]) / 2
};
println!("中位数: {}", median);
如果向量的长度是奇数,中位数就是排序后中间的那个数。如果长度是偶数,中位数就是排序后中间两个数的平均值。
计算众数
为了计算众数,我们引入了一个新的向量 v
并使用 HashMap
来记录每个元素出现的次数:
let mut scores = HashMap::new();
for element in &v {
*scores.entry(element).or_insert(0) += 1;
}
然后,我们输出 HashMap
来验证每个元素的出现次数:
for (key, value) in &scores {
println!("{}: {}", key, value);
}
最后,通过遍历 HashMap
来找到出现次数最多的元素:
let mut max_count = 0;
let mut mode = None;
for (key, count) in &scores {
if *count > max_count {
max_count = *count;
mode = Some(*key);
}
}
match mode {
Some(key) => println!("众数: {}", key),
None => println!("没有众数"),
}
总结
通过上述步骤,我们成功计算出了一个整数列表的平均数、中位数和众数。这段代码展示了如何使用 Rust 进行基本的统计分析。希望这篇文章能够帮助你更好地理解 Rust 编程语言并应用于实际问题。如果你有任何问题或反馈,请随时留言。