当前位置: 首页 > news >正文

【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 中非常实用的特性,特别适合处理序列、循环和切片操作。

http://www.cnnetsun.cn/news/182269.html

相关文章:

  • Windows右键菜单清理终极指南:5分钟让你的右键菜单焕然一新![特殊字符]
  • 纪念币预约工具:从手忙脚乱到轻松搞定
  • 如何用LeaguePrank轻松打造个性化英雄联盟形象
  • 线索管理是什么?为什么同样的客户线索,有人成交多,有人成交少?
  • NVIDIA Profile Inspector终极性能调优完整指南:4步解决显卡性能瓶颈
  • NVIDIA Profile Inspector终极指南:解锁显卡隐藏性能的完整教程
  • 百度网盘下载优化工具:三分钟实现高效下载的实用方案
  • 2025年华中科技大学计算机考研复试机试真题(附 AC 代码 + 解题思路)
  • NVIDIA显卡调优深度指南:专业级驱动优化的4大实战方案
  • 终极百度网盘下载加速方案:5个步骤实现全速下载
  • 【Java】【JVM】OOM 原因、定位与解决方案
  • Unity游戏翻译工具:3步轻松实现海外游戏无障碍体验
  • 百度网盘资源高效获取技术指南:解析工具实战应用
  • 从边缘计算到自主学习,端侧大模型落地难点全解析,一文讲透
  • HsMod插件终极指南:3种高效配置方法快速上手
  • 2024多模态AI排名出炉(Open-AutoGLM第一,99%的人还没意识到它的潜力)
  • 百度网盘智能解析下载加速工具技术指南
  • 21. 集合
  • 英雄联盟个性化定制工具深度体验指南
  • XUnity自动翻译器:让外语游戏秒变中文版的神奇工具
  • DownKyi终极指南:解锁B站视频批量下载的10个高效技巧
  • Unity游戏自动翻译工具XUnity.AutoTranslator完全配置指南
  • 【行业首发】AutoGLM-Phone-9B多模态对齐机制揭秘:跨模态理解准确率提升至92.7%
  • 错过等十年:2026年AI手机智能体三大稀缺能力首次公开
  • Unity游戏实时翻译技术:XUnity.AutoTranslator架构深度解析与实战配置
  • 终极指南:用XUnity.AutoTranslator轻松实现Unity游戏多语言翻译
  • 哔哩下载姬DownKyi终极指南:打造个人视频资源库的完整攻略
  • Windows右键菜单管理大师:ContextMenuManager完全使用指南
  • 5分钟掌握XUnity.AutoTranslator:游戏本地化的终极解决方案
  • DownKyi终极指南:5步掌握B站视频高效下载与管理