CodeSnippet.Cn
代码片段
Csharp
架构设计
.NetCore
西班牙语
kubernetes
MySql
Redis
Algorithm
Ubuntu
Linux
Other
.NetMvc
VisualStudio
Git
pm
Python
WPF
java
Plug-In
分布式
CSS
微服务架构
JavaScript
DataStructure
Shared
C# 8 - Range 和 Index(范围和索引)
0
Csharp
小笨蛋
发布于:2022年01月26日
更新于:2022年01月26日
140
#custom-toc-container
### C# 7 的 Span C# 7 里面出现了Span这个数据类型,它可以表示另一个数据结构里连续相邻的一串数据,并且它是内存安全的。 ![图片alt](/uploads/images/20220126/123010-7f27ca909f0f49da82dd4e26bae272a4.png ''代码片段:Www.CodeSnippet.Cn'') 这个图的输出是3,4,5,6。 ### C# 8 的Range类型 而C# 8里面我们可以从一个序列里面很简单的提取出来一个子范围组成新的序列。 ![图片alt](/uploads/images/20220126/123026-0a4b7777a4dc4147820e5ab1158bfa90.png ''代码片段:Www.CodeSnippet.Cn'') 这里面使用了范围运算符“..”。 `arr[2..4]`表示把arr这个序列,从索引为2的元素一直到索引为4(**但不包括索引4**)的元素提取出来组成新的序列。所以结果就是`3,4`。 #### Range类型 也可以直接创建Range类型的变量: ![图片alt](/uploads/images/20220126/123053-c26b5c2360b94ca3a74aab402d50c75c.png ''代码片段:Www.CodeSnippet.Cn'') 这段代码的输出结果和上面是一样的。 ### C# 8 的Index类型 **Index 类型和 ^ 操作符** ![图片alt](/uploads/images/20220126/123122-c63d373667844d90a4034aca8b90ec76.png ''代码片段:Www.CodeSnippet.Cn'') 这里使用了**末尾运算符(Hat运算符**) ^ 和 Index这个类型。 这里面的 `^2` 表示从序列的倒数第二个元素,也就是从末尾开始算的第二个元素。所以输出是9。 而如果你使用`arr[^0]`的话就会抛出`IndexOutOfRangeException`,`arr[^0] 和 arr[arr.Length]` 是一个意思。 这确实有点容易让人混淆,但其实其它语言也差不多是这样设计的,例如 -1 这个索引表示最后一个元素。 ### 组合使用 Range 和 Index Range和Index经常组合着使用。 ![图片alt](/uploads/images/20220126/123142-6f736df36f054cacb6dfa13999258c4e.png ''代码片段:Www.CodeSnippet.Cn'') 这里arrTwin和arr的元素是完全一样的。 这里还可以更简化一下写法: ![图片alt](/uploads/images/20220126/123153-abb08b3c73124bb79bec18e14798bbfa.png ''代码片段:Www.CodeSnippet.Cn'') arrTwin 就是 arr 完整的拷贝。 下面这三种写法的效果是一样的: ![图片alt](/uploads/images/20220126/123205-41a073b5fd01431e93b3dfb539f6d792.png ''代码片段:Www.CodeSnippet.Cn'') 再次强调,**Range的范围包含Start不包含End**。 所以索引为0的元素包含,索引为10或者^0的元素不包含(尽管也不存在)。 其它一些例子: ![图片alt](/uploads/images/20220126/123220-7d763c3fbf1d4873851347812a45ec38.png ''代码片段:Www.CodeSnippet.Cn'') 单独使用Range或Index的例子: ![图片alt](/uploads/images/20220126/123227-09319ab5d5434bb893a6684e3251ecbc.png ''代码片段:Www.CodeSnippet.Cn'') 这个输出结果是5,6,7。 ### 总结一下 - Range类型; - 一定要注意Range的范围包括Start不包括End。 - Range运算符:.. - Index类型; - 从头开始的索引是从0开始的 - 从尾部开始的索引是从1开始的,与序列的长度相关。 - Hat 运算符:^
这里⇓感觉得写点什么,要不显得有点空,但还没想好写什么...
返回顶部
About
京ICP备13038605号
© 代码片段 2024