C# 8 - Range 和 Index(范围和索引)
C# 7 的 Span
C# 7 里面出现了Span这个数据类型,它可以表示另一个数据结构里连续相邻的一串数据,并且它是内存安全的。
例子:
这个图的输出是3,4,5,6。
C# 8 的Range类型
而C# 8里面我们可以从一个序列里面很简单的提取出来一个子范围组成新的序列。
看例子:
这里面使用了范围运算符“..”。
arr[2..4]表示把arr这个序列,从索引为2的元素一直到索引为4(但不包括索引4)的元素提取出来组成新的序列。所以结果就是3,4。
Range类型
也可以直接创建Range类型的变量:
这段代码的输出结果和上面是一样的。
C# 8 的Index类型
Index 类型和 ^ 操作符
直接看例子:
这里使用了末尾运算符(Hat运算符) ^ 和 Index这个类型。
这里面的 ^2 表示从序列的倒数第二个元素,也就是从末尾开始算的第二个元素。所以输出是9。
而如果你使用arr[^0]的话就会抛出IndexOutOfRangeException,arr[^0] 和 arr[arr.Length] 是一个意思。
这确实有点容易让人混淆,但其实其它语言也差不多是这样设计的,例如 -1 这个索引表示最后一个元素。
组合使用 Range 和 Index
Range和Index经常组合着使用。
例如:
这里arrTwin和arr的元素是完全一样的。
这里还可以更简化一下写法:
arrTwin 就是 arr 完整的拷贝。
下面这三种写法的效果是一样的:
再次强调,Range的范围包含Start不包含End。
所以索引为0的元素包含,索引为10或者^0的元素不包含(尽管也不存在)。
其它一些例子:
单独使用Range或Index的例子:
这个输出结果是5,6,7。
总结一下:
Range类型;
一定要注意Range的范围包括Start不包括End。
Range运算符:..
Index类型;
从头开始的索引是从0开始的
从尾部开始的索引是从1开始的,与序列的长度相关。
Hat 运算符:^
详细文档请点击这个链接:https://docs.microsoft.com/zh-cn/dotnet/csharp/tutorials/ranges-indexes?WT.mc_id=DT-MVP-5003302
C# 8 - Range 和 Index(范围和索引)的更多相关文章
- 8.2.1.7 Use of Index Extensions 使用索引扩展
8.2.1.7 Use of Index Extensions 使用索引扩展 InnoDB 自动扩展每个secondary index 通过添加primary key columns to it,考虑 ...
- 8.2.1.4 Index Merge Optimization 索引合并优化:
8.2.1.4 Index Merge Optimization 索引合并优化: 索引合并方法是用于检索记录 使用多个 范围扫描和合并它们的结果集到一起 mysql> show index fr ...
- index range scan,index fast full scan,index skip scan发生的条件
源链接:https://blog.csdn.net/robinson1988/article/details/4980611 index range scan(索引范围扫描): 1.对于unique ...
- 聚合索引(clustered index) / 非聚合索引(nonclustered index)
以下我面试经常问的2道题..尤其针对觉得自己SQL SERVER 还不错的同志.. 呵呵 很难有人答得好.. 各位在我收集每个人擅长的东西时,大部分都把SQL SERVER 标为Expert,看看是否 ...
- sqlserver聚合索引(clustered index) / 非聚合索引(nonclustered index)的理解
1. 什么是聚合索引(clustered index) / 什么是非聚合索引(nonclustered index)? 可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索 ...
- [_UICascadingTextStorage attributesAtIndex:effectiveRange:]: Range or index out of bounds
之前写过一篇<如何更好地限制一个UITextField的输入长度>,在文章最后得到的结论是可以直接使用 UIKIT_EXTERN NSString *const UITextFieldTe ...
- all index range ref eq_ref const system 索引type说明
背景知识 在使用sql的过程中经常需要建立索引,而每种索引是怎么处罚的又是怎么起到作用的,首先必须知道索引和索引的类型. 索引类型type 我们可以清楚的看到type那一栏有index ALL eq_ ...
- MySQL 优化之 ICP (index condition pushdown:索引条件下推)
ICP技术是在MySQL5.6中引入的一种索引优化技术.它能减少在使用 二级索引 过滤where条件时的回表次数 和 减少MySQL server层和引擎层的交互次数.在索引组织表中,使用二级索引进行 ...
- [MySQL] 使用force index强制使用索引
1.在测试一个按照时间的范围查询时,尽管增加了索引,发现使用不到索引,可以使用这个来强制使用索引 测试过程为,创建下面的表,以及创建了联合索引 create table delay_delete_us ...
随机推荐
- NPOI导出Excel封装
直接上代码 public class ExcelUtils { public static ICellStyle CreateStyle(IWorkbook workbook, string font ...
- Android-打包AAR步骤以及最为关键的注意事项!
### 简介 最近因为项目的要求,需要把开发的模块打包成aar,供其他项目调用,在搞了一段时间后,发现这里还是有很多需要注意的地方,所以记录一下,帮助大家不要走弯路. **首先何为aar包?** ![ ...
- Oracle 11g Rac 用rman实现把本地数据文件迁移到ASM共享存储中
在Oracle Rac环境中,数据文件都是要存放在ASM共享存储上的,这样两个节点才能同时访问.而当你在某一节点下把数据文件创建在本地磁盘的时候,那么在另一节点上要访问该数据文件的时候就会报错,因为找 ...
- 题解 洛谷P2833 【等式】
运用暴力解方程吸氧过了这道题 通过数据范围看,要是枚举x和y只能炸掉三成的数据. 所以考虑枚举从x1到x2枚举x,通过方程移项可知y=-(ax+c)/b,再判断y是否在y1和y2之间即可. 本题本做法 ...
- ie表单提交提示下载文件
使用jquery的ajaxform提交form表单 如果在html中多了 enctype ="multipart/form-data" 属性值 提交时就会在ie8中提示下载 ...
- IDEA中工程上传到SVN
1.先在IDEA上集成SVN 2.查看SVN仓库:连接SVN ①此时应该先去SVN服务器中新建一个SVN服务: 点击下一步 点击下一步 点击create ②查看SVN仓库 先复制SVN的地址 把复制的 ...
- linux中安装vsftpd出现的问题
提示:安装vsftpd必须要在root用户下才能安装成功,进入root:su -(中间有空格) 问题: 1.再用命令getsebool -a | grep ftpd命令查看查看状态时出现的问题:SEL ...
- 警告:Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
执行Maven Install打包的时候,提示以下警告信息: [WARNING] Using platform encoding (GBK actually) to copy filtered res ...
- 深入浅出Mysql索引的那些事儿
文章来源:公众号:猿人谷 一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优 ...
- Oracle之select
坚持