轻芒小程序wordpress,外贸网站建设和优化,企业地址管理系统,微信网站用什么做的在 Rust 中#xff0c;Range 表示一个区间#xff0c;通常用于迭代和切片操作。Rust 提供了多种范围类型#xff0c;各有不同的特性。
1. 基本范围类型
a) 左闭右开范围 start..end
// 包含 start#xff0c;不包含 end
for i in 0..5 {println!({}, i); // 输…在 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.范围创建语法letrange10..10;// Rangeletrange20..10;// RangeInclusiveletrange3..10;// RangeToletrange4..10;// RangeToInclusiveletrange55..;// RangeFromletrange6..;// RangeFull3.范围的使用场景a) 循环迭代foriin1..10{println!(Iteration {},i);}for_in0..5{println!(重复5次);}b) 数组/切片切片letarr[0,1,2,3,4,5];letslice1arr[1..4];// [1, 2, 3]letslice2arr[..3];// [0, 1, 2]letslice3arr[2..];// [2, 3, 4, 5]letslice4arr[..];// 整个数组c) 模式匹配letx5;matchx{0..5println!(0到5之间),6..10println!(6到10之间),_println!(其他),}4.范围的方法和特性包含性检查letrange1..10;assert!(range.contains(5));assert!(!range.contains(10));letinclusive_range1..10;assert!(inclusive_range.contains(10));范围运算letr0..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;// 为自定义类型实现 IndexRangeusizestructMyVec(Veci32);implstd::ops::IndexRangeusizeforMyVec{typeOutput[i32];fnindex(self,index:Rangeusize)-Self::Output{self.0[index]}}6.范围和迭代器范围实现了Iteratortraitletsum:i32(1..100).sum();println!(1到100的和: {},sum);letevens:Vec_(0..20).filter(|x|x%20).collect();7.范围边界类型范围不仅限于整数letchar_rangea..z;forcinchar_range{print!({} ,c);}// 浮点数不支持 Range不能迭代但可以用于比较letx3.14;if(0.0..1.0).contains(x){println!(在0到1之间);}8.实用技巧反向范围foriin(0..5).rev(){println!({},i);// 4, 3, 2, 1, 0}范围组合letr10..10;letr25..15;// 范围可以比较assert!(r1.startr2.start);范围模式匹配fncheck_range(n:i32)-staticstr{matchn{i32::MIN..-1负数,0零,1..i32::MAX正数,}}9.范围类型总结表语法类型包含 start包含 end示例a..bRange✅❌0..5a..bRangeInclusive✅✅0..5..bRangeTo❌❌..5..bRangeToInclusive❌✅..5a..RangeFrom✅❌5....RangeFull❌❌..10.常见陷阱// 注意范围是左闭右开的foriin0..0{// 这里不会执行}// 反向范围需要明确的起点和终点foriin(5..1).rev(){// 错误5..1 是空范围// 正确的做法// for i in (1..5).rev()}总结Rust 的范围系统提供了类型安全编译时检查范围有效性灵活性多种范围类型满足不同需求高性能零成本抽象可组合性可与迭代器等方法链式调用范围是 Rust 中非常实用的特性特别适合处理序列、循环和切片操作。