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(范围和索引)相关推荐

  1. 根据 sitemap 的规则[0],当前页面 [pages/index/index] 将被索引 提示

    根据 sitemap 的规则[0],当前页面 [pages/index/index] 将被索引 提示 "checkSiteMap": false,

  2. sqlserver聚合索引(clustered index) / 非聚合索引(nonclustered index)的理解

    1. 什么是聚合索引(clustered index) / 什么是非聚合索引(nonclustered index)? 可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索 ...

  3. 微信小程序 调试器的 console提示框 的 无用黄色警告关闭 --- 根据 sitemap 的规则[0],当前页面 [pages/index/index] 将被索引

    内容 Sat Jul 11 2020 17:51:58 GMT+0800 (中国标准时间) sitemap 索引情况提示 VM18961:1 根据 sitemap 的规则[0],当前页面 [pages ...

  4. oracle index skip scan,索引跳跃式扫描(INDEX SKIP SCAN)

    索引跳跃式扫描(INDEX SKIP SCAN) 索引跳跃式扫描(INDEX SKIP SCAN)适用于所有类型的复合B树索引(包括唯一性索引和非唯一性索引),它使那些在where条件中没有对目标索引 ...

  5. all index range ref eq_ref const system 索引type说明

    背景知识 在使用sql的过程中经常需要建立索引,而每种索引是怎么处罚的又是怎么起到作用的,首先必须知道索引和索引的类型. 索引类型type 我们可以清楚的看到type那一栏有index ALL eq_ ...

  6. all index range ref eq_ref const system 索引type说明

    背景知识 在使用sql的过程中经常需要建立索引,而每种索引是怎么处罚的又是怎么起到作用的,首先必须知道索引和索引的类型. 索引类型type 我们可以清楚的看到type那一栏有index ALL eq_ ...

  7. mysql 索引条件推送_MySQL 处理where条件 index condition pushdown索引条件下推

    5.6之后,MySQL的优化技术 在使用二级索引过滤where条件时,减少回表的次数 以及 MySQL server层和引擎层交互的次数 1.数据库如何处理where条件 index key(inde ...

  8. CWE-129: Improper Validation of Array Index(数组索引验证不当)

     ID: 129 类型:基础 结构:简单 状态:草稿 描述 产品在计算或使用数组索引时使用不受信任的输入,但产品不会验证或错误地验证索引,以确保索引引用数组中的有效位置. 关联视图 与"研究 ...

  9. oracle index range scan,INDEX RANGE SCAN (MIN/MAX)很慢的问题

    这个问题以前也遇到过,这是第二次了.这个问题比较有意思,一开始考虑的很多因素都被一一排除了,最后才发现问题所在.当使用select min(col1) from t或者select max(col1) ...

最新文章

  1. R语言条件Logistic回归模型案例:研究饮酒与胃癌的关系
  2. 百度超级链XChain(12)平行链与群组
  3. 保存一波集合框架的介绍
  4. 吴裕雄 19-Mysql 连接的使用
  5. SQL-Server使用点滴(一-数据对象篇)
  6. 7-63 情人节 (15 分)(c++stl)
  7. SQL2005学习(十六),SQL小知识点
  8. Emacs进阶之选择当前word/line
  9. 全局唯一递增的id_分布式系统全局唯一ID简介、特点、生成
  10. caffe 将数据(非图像和图像)转成lmdb格式的数据
  11. V神站台--黑马BZZ究竟如何?和FIL 有什么区别?
  12. 人工智能 机器学习 数据挖掘 数据分析 算法大全
  13. 通过阿里云api获取ecs主机信息
  14. 软件系统的多维性能模型
  15. 转载 : 10大H5前端框架
  16. 投资理财学习笔记二,1.4做个有钱人之富人思维
  17. 带固态硬盘的电脑Ubuntu和Windows双系统安装
  18. 项目01城市餐饮店铺选址分析
  19. Prism:Uber 的 Presto 查询网关服务
  20. 抗生素耐药性革兰氏阴性菌感染的治疗,2020最新IDSA指南

热门文章

  1. 常见三维文件格式之STL
  2. 免费的数字图书馆_不仅是书籍:您当地图书馆可能提供的所有免费数字资料
  3. centos7下别名(alias)的特殊用法
  4. 老司机带你重构Android的v4包的部分源码
  5. prometheus python client
  6. Scala-2.13.0 安装及配置
  7. 如何关闭Struts2的webconsole.html
  8. mysql出现连接错误不识别 utf8mb4
  9. java基础巩固笔记(6)-注解
  10. 【2】开发环境的搭建,Ubuntu14.04