前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C# 8 - Range 和 Index(范围和索引)

C# 8 - Range 和 Index(范围和索引)

作者头像
solenovex
发布2019-10-15 17:39:50
8340
发布2019-10-15 17:39:50
举报
文章被收录于专栏:草根专栏草根专栏

C# 7 的 Span

C# 7 里面出现了Span这个数据类型,它可以表示另一个数据结构里连续相邻的一串数据,并且它是内存安全的。

例子:

var arr = 
2, 
new[] 
slice - 
arr. 
AsSpan(). 
Slice( 
start: 
4); 
length: 
foreach (var number in slice) 
Console . WriteLine( number);
var arr = 2, new[] slice - arr. AsSpan(). Slice( start: 4); length: foreach (var number in slice) Console . WriteLine( number);

这个图的输出是3,4,5,6。

C# 8 的Range类型

而C# 8里面我们可以从一个序列里面很简单的提取出来一个子范围组成新的序列。

看例子:

5, 
9, 
var arr = 
new[] {1, 2, 3 
6 
int[] slice = 
arr[2 „ 4]; 
foreach (var number in slice) 
Console . WriteLine( number);
5, 9, var arr = new[] {1, 2, 3 6 int[] slice = arr[2 „ 4]; foreach (var number in slice) Console . WriteLine( number);

这里面使用了范围运算符“..”。

arr[2..4]表示把arr这个序列,从索引为2的元素一直到索引为4(但不包括索引4)的元素提取出来组成新的序列。所以结果就是3,4。

Range类型

也可以直接创建Range类型的变量:

, 4,5 
9, 
var arr = 
new[] {1, 2, 3 
6 
Rgnge range = 2.. 4; 
int[] slice = 
arr[range] ; 
foreach (var i in slice) 
Console . WriteLine(i);
, 4,5 9, var arr = new[] {1, 2, 3 6 Rgnge range = 2.. 4; int[] slice = arr[range] ; foreach (var i in slice) Console . WriteLine(i);

这段代码的输出结果和上面是一样的。

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C# 7 的 Span
  • C# 8 的Range类型
    • Range类型
    • C# 8 的Index类型
      • Index 类型和 ^ 操作符
      • 组合使用 Range 和 Index
      • 总结一下:
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档