news 2026/6/2 23:41:10

【Rust】范围 Range详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Rust】范围 Range详解

在 Rust 中,Range 表示一个区间,通常用于迭代和切片操作。Rust 提供了多种范围类型,各有不同的特性。

1.基本范围类型

a) 左闭右开范围start..end

// 包含 start,不包含 endforiin0..5{println!("{}",i);// 输出 0, 1, 2, 3, 4}

b) 全闭范围start..=end

// 包含 start 和 endforiin0..=5{println!("{}",i);// 输出 0, 1, 2, 3, 4, 5}

2.范围创建语法

letrange1=0..10;// Rangeletrange2=0..=10;// RangeInclusiveletrange3=..10;// RangeToletrange4=..=10;// RangeToInclusiveletrange5=5..;// RangeFromletrange6=..;// RangeFull

3.范围的使用场景

a) 循环迭代

foriin1..=10{println!("Iteration {}",i);}for_in0..5{println!("重复5次");}

b) 数组/切片切片

letarr=[0,1,2,3,4,5];letslice1=&arr[1..4];// [1, 2, 3]letslice2=&arr[..3];// [0, 1, 2]letslice3=&arr[2..];// [2, 3, 4, 5]letslice4=&arr[..];// 整个数组

c) 模式匹配

letx=5;matchx{0..=5=>println!("0到5之间"),6..=10=>println!("6到10之间"),_=>println!("其他"),}

4.范围的方法和特性

包含性检查

letrange=1..10;assert!(range.contains(&5));assert!(!range.contains(&10));letinclusive_range=1..=10;assert!(inclusive_range.contains(&10));

范围运算

letr=0..10;println!("Start: {:?}",r.start);// 0println!("End: {:?}",r.end);// 10// 范围可以迭代foriin(0..10).step_by(2){println!("{}",i);// 0, 2, 4, 6, 8}

5.自定义类型支持范围

usestd::ops::Range;// 为自定义类型实现 Index<Range<usize>>structMyVec(Vec<i32>);implstd::ops::Index<Range<usize>>forMyVec{typeOutput=[i32];fnindex(&self,index:Range<usize>)->&Self::Output{&self.0[index]}}

6.范围和迭代器

范围实现了Iteratortrait:

letsum:i32=(1..=100).sum();println!("1到100的和: {}",sum);letevens:Vec<_>=(0..20).filter(|x|x%2==0).collect();

7.范围边界类型

范围不仅限于整数:

letchar_range='a'..='z';forcinchar_range{print!("{} ",c);}// 浮点数不支持 Range(不能迭代),但可以用于比较letx=3.14;if(0.0..1.0).contains(&x){println!("在0到1之间");}

8.实用技巧

反向范围

foriin(0..5).rev(){println!("{}",i);// 4, 3, 2, 1, 0}

范围组合

letr1=0..10;letr2=5..15;// 范围可以比较assert!(r1.start<r2.start);

范围模式匹配

fncheck_range(n:i32)->&'staticstr{matchn{i32::MIN..=-1=>"负数",0=>"零",1..=i32::MAX=>"正数",}}

9.范围类型总结表

语法类型包含 start包含 end示例
a..bRange0..5
a..=bRangeInclusive0..=5
..bRangeTo..5
..=bRangeToInclusive..=5
a..RangeFrom5..
..RangeFull..

10.常见陷阱

// 注意:范围是左闭右开的foriin0..0{// 这里不会执行!}// 反向范围需要明确的起点和终点foriin(5..=1).rev(){// 错误:5..=1 是空范围// 正确的做法:// for i in (1..=5).rev()}

总结

Rust 的范围系统提供了:

  • 类型安全:编译时检查范围有效性
  • 灵活性:多种范围类型满足不同需求
  • 高性能:零成本抽象
  • 可组合性:可与迭代器等方法链式调用

范围是 Rust 中非常实用的特性,特别适合处理序列、循环和切片操作。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/3 15:12:30

微信多设备登录终极解决方案:WeChatPad让多设备同时在线成为可能

微信多设备登录终极解决方案&#xff1a;WeChatPad让多设备同时在线成为可能 【免费下载链接】WeChatPad 强制使用微信平板模式 项目地址: https://gitcode.com/gh_mirrors/we/WeChatPad WeChatPad是一个革命性的LSPosed模块&#xff0c;专门为解决微信单一设备登录限制…

作者头像 李华
网站建设 2026/6/3 15:57:44

League Akari 6大实战功能解析:从繁琐操作到智能游戏的完美升级

还在为选人阶段的紧张时刻而错失心仪英雄吗&#xff1f;英雄联盟辅助工具League Akari基于官方LCU API开发&#xff0c;通过智能自动化功能彻底改变你的游戏体验。这款工具不仅能帮你处理重复性操作&#xff0c;更能让你专注于游戏策略和团队配合&#xff0c;享受纯粹的对战乐趣…

作者头像 李华
网站建设 2026/6/3 5:44:08

终极英雄联盟智能游戏助手:3分钟快速上手指南

终极英雄联盟智能游戏助手&#xff1a;3分钟快速上手指南 【免费下载链接】LeagueAkari ✨兴趣使然的&#xff0c;功能全面的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/LeagueAkari 还在为手速不够快…

作者头像 李华
网站建设 2026/6/2 20:41:53

百度网盘直链解析工具:突破限速的完整解决方案

还在为百度网盘的下载速度而烦恼吗&#xff1f;每次看到几十KB的下载进度&#xff0c;是不是感觉回到了拨号上网的时代&#xff1f;这款百度网盘直链解析工具正是你需要的提速利器&#xff0c;它能帮你提取真实下载链接&#xff0c;让下载速度直接提升&#xff01; 【免费下载链…

作者头像 李华
网站建设 2026/6/3 10:57:04

百度网盘直链解析终极指南:免费突破下载限速

百度网盘直链解析终极指南&#xff1a;免费突破下载限速 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 在当今数字化时代&#xff0c;百度网盘作为国内最主流的云存储平台&am…

作者头像 李华
网站建设 2026/6/3 11:26:42

百度网盘高速下载解决方案:3步实现免客户端全速下载

在数字化资源分享日益频繁的今天&#xff0c;百度网盘解析工具以其革命性的下载效率提升&#xff0c;成为了技术新手和普通用户突破下载限制的首选方案。这款智能解析工具能够一键获取真实下载地址&#xff0c;实现免客户端高速下载&#xff0c;让分享链接解析变得前所未有的简…

作者头像 李华