关于c#:C8中的Range和Index范围和索引

35次阅读

共计 1703 个字符,预计需要花费 5 分钟才能阅读完成。

起源:https://note.guoqianfan.com/2…

Range- 范畴

范畴运算符

  • 范畴运算符:..,它会生成一个 Range 对象。
  • 语法:{startIndex}..{endIndex}:蕴含 startIndex 不蕴含endIndex
  • 限度:0 <= startIndex <= endIndex <= arr.Length,其余均会报错!

    startIndex等于 endIndex 时,取不出元素,会生成一个 空数组

留神

  • 默认状况下,..的后面是 0,前面是 arr.Length(不含).. 等价于0..arr.Length
  • 所以 .. 的后面和前面 均能够为空
  • 所以 .. 也能够独自应用,代表整个索引范畴 (0..arr.Length):arr[..]arr的残缺拷贝。

深拷贝 还是 浅拷贝 须要看元素是 值类型 还是 援用类型 值类型 复制值,能够认为是 深拷贝 援用类型 复制援用,就是 浅拷贝

Range

Range用来从汇合中取出 指定索引范畴 的元素来生成 新的汇合

创立RangeRange range = 2..4;

var arr = new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Range range = 2..4;
int[] slice = arr[range]; // 或 arr[2..4];
foreach (var number in slice)
{// [3, 4]
    Console.WriteLine(number);
}

arr[2..4]示意把 arr 这个序列,从索引为 2 的元素始终到索引为 4(不含 4)的元素提取进去组成新的序列。所以后果就是 3,4。

Index- 索引

Index用来指定 索引 。该索引能够用来从汇合中取出 指定索引处 的元素,是 单个元素

乍一看,Indexint 类型的索引 没啥区别。嗯。。的确是这样,因为 Index 要与 ^ 操作符联合起来能力施展更大的作用。对了,还有Range。。

开端运算符

^是开端运算符(Hat 运算符),它会生成一个 Index 对象,用来从 开端 开始 往前 取数据。

正向取数据 时索引从 0 开始不同,^取数据时是从 1 开始的,代表 倒数第一个元素

  • arr[^1]等于arr[arr.Length-1],最初一个元素
  • arr[^0]等于 arr[arr.Length],常与Range 组合应用

如果应用 arr[^0] 的话就会抛出 IndexOutOfRangeExceptionarr[^0]arr[arr.Length]是一个意思。

这的确有点容易让人混同,但其实其它语言也差不多是这样设计的,例如 -1 这个索引示意最初一个元素。

组合应用 Range 和 Index

残缺拷贝数组的 3 种形式

int[] arr = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] arr01 = arr[0..arr.Length];
int[] arr02 = arr[0..^0];
int[] arr03 = arr[..];

留神

  • Range 的范畴蕴含 Start,不蕴含End。
  • 所以索引为 0 的元素蕴含,索引为 10 或者 ^0 的元素 不蕴含(只管也不存在)。

更多例子

int[] arr = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] arr01 = arr[..]; // 残缺的复制,数组
int[] allButFirst = arr[1..]; // 不蕴含第一个元素的数组
int[] empty = arr[^0..]; // 空数组
int[] onlyLastItem = arr[^1..]; // 只蕴含最初一个元素的数组
int[] last4Items = arr[^4..]; // 只蕴含最初四个元素的数组
int lastItem = arr[^1]; // 最初一个元素

独自应用 Range 或 Index

int[] arr = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Index middle = 4;
Index threeFromEnd = ^3;
Range range = middle..threeFromEnd;
int[] mySlice = arr[range]; //5, 6, 7

参考

  1. C# 8 – Range 和 Index(范畴和索引):https://mp.weixin.qq.com/s?__…,好文,强烈推荐!!

正文完
 0