1
我知道如何對整個矢量操作,雖然我不認爲這是地道的防鏽:如何操作矢量的子集?
fn median(v: &Vec<u32>) -> f32 {
let count = v.len();
if count % 2 == 1 {
v[count/2] as f32
} else {
(v[count/2] as f32 + v[count/2 - 1] as f32)/2.0
}
}
fn main() {
let mut v1 = vec![3, 7, 8, 5, 12, 14, 21, 13, 18];
v1.sort();
println!("{:.*}", 1, median(&v1));
}
但是,如果我想要操作僅此矢量的一半呢?例如,第一個四分位數是下半部分的中位數,第三個四分位數是上半部分的中位數。我的第一個想法是構建兩個新的載體,但看起來不太正確。
我該如何獲得「半」矢量?提到
關於如何通過迭代器請檢查[這裏](http://stackoverflow.com/questions/34969902/how-to-write-a-rust-function-that-takes-an-iterator)。對於你的第一個問題,你可以分一杯羹,例如'let slice =&v1 [0..v1.len()/ 2]' – Jack
[每個問題請問一個問題](http://meta.stackexchange.com/q /281829分之39223)。既然你的「接受一個迭代器」的問題已經有了重複,我剛剛刪除了它。 – Shepmaster