You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust编写中位数函数时Vec调用sort后调用len()提示未针对()实现的报错

报错原因

你的推测完全正确。

  • Rust标准库中Vec的sort()方法是原地修改式排序,不会返回排序完成后的新向量,该方法的返回值就是单元类型()(即无实际返回内容的特殊类型)。
  • 你代码里的let sorted = v.sort();执行后,sorted变量绑定的根本不是排序后的向量,而是没有任何实际数据的()类型,后续对sorted调用.len()做长度计算、做索引取值的操作,自然会触发“未针对类型()实现len()方法”的报错。
修正实现

因为sort()需要直接修改向量本身,所以需要把待排序的向量绑定为可变变量,排序操作直接作用在原向量上即可,完全不需要接收sort()的返回值。
修正后的可运行代码如下:

fn main() {
    let vec = vec![1,2,3,4,5];
    println!("{}",median(vec))
}

fn median(v: Vec<i32>) -> i32 {
    // 将传入的向量绑定为可变变量
    let mut sorted = v;
    // 执行原地排序,不接收无意义的返回值
    sorted.sort();
    let med_idx = sorted.len() / 2;
    sorted[med_idx]
}

补充说明

  • 原代码里把向量长度强转为i32的操作没有必要:Vec的len()方法返回的是usize类型,本身就适配向量索引的类型要求,强行转成i32反而会在32位目标架构上出现兼容问题。
  • 如果不想修改原向量、希望拿到排序后的独立副本,可以先对原向量做克隆,再对克隆出来的可变副本执行排序即可。

内容的提问来源于stack exchange,提问作者Sam Dillard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 09:45:04