这是我参与更文挑战的第7天,活动详情查看: 更文挑战
C#8.0新功能系列中断了好久,今天又重新起航了,每天学习进步一点点~~~
1.数组操作的传统做法
有过数组学习经验的人,应该都知道数组的访问可以按照下标直接访问,那么最直接的数组访问方式也即如此。
如果需要访问数组的后几个字母,那么我们只需要获取数组总长度,然后减去从后数的个数即可。
当然c#也提供了Linq查询方式,我们可以利用 Skip,Take组合获取指定位置的字母。
例子代码如下:
string[] letters = { "A", "B", "C", "D", "E", "F", "G", "H" };
string firstLetter = letters[0];
string secondLetter = letters[1];
string lastLetter = letters[letters.Length - 1];
string penultimateLetter = letters[letters.Length - 2];
string[] middleTwoLetters = letters.Skip(2)
.Take(2)
.ToArray();
string[] everythingExceptFirstAndLast = letters.Skip(1)
.Take(letters.Length - 2)
.ToArray();
Console.WriteLine($"{firstLetter},{secondLetter},{lastLetter},{penultimateLetter}");
Console.WriteLine($"middleTwoLetters:{string.Join(",",middleTwoLetters)}");
Console.WriteLine($"everythingExceptFirstAndLast:{string.Join(",", everythingExceptFirstAndLast)}");
复制代码
A,B,H,G
middleTwoLetters:C,D
everythingExceptFirstAndLast:B,C,D,E,F,G
复制代码
2. C#引入 ^,倒叙查找元素
^ N
,N表示数组的长度,因此 ^1
表示倒数最后一个元素。
例如上面的代码可以简化为如下代码:
string[] letters = { "A", "B", "C", "D", "E", "F", "G", "H" };
string firstLetter = letters[0];
string secondLetter = letters[1];
string lastLetter = letters[^1];
string penultimateLetter = letters[^2];
string[] middleTwoLetters = letters[2..4];
string[] everythingExceptFirstAndLast = letters[1..^1];
Console.WriteLine($"{firstLetter},{secondLetter},{lastLetter},{penultimateLetter}");
Console.WriteLine($"middleTwoLetters:{string.Join(",",middleTwoLetters)}");
Console.WriteLine($"everythingExceptFirstAndLast:{string.Join(",", everythingExceptFirstAndLast)}");
复制代码
打印如下结果
A,B,H,G
middleTwoLetters:C,D
everythingExceptFirstAndLast:B,C,D,E,F,G
复制代码
除了新引入的 ^N
索引符号外,还引入了 范围运算符 ..
,这允许你指定元素的范围,例如代码中的[2..4]就给了我们字母 C 和D,或者,换句话说,它给了我们从2开始到4结束的元素范围。
注意,最后一个索引是不包含的,意思是,包含2,不包含4的范围。
当然,你可以使用开放范围,表示直到开始或结束,例如: [^3..]
, [..5]
为了使新索引功能起作用,C# 引入了 Index的新结构,为了兼容范围作用域,也同样的有一个Range的新结构。
你可以直接使用这两个结构定义代码。
Index index = new Index(5, true);
string tmp = letters[index];
Range middleTwo = new Range(2, 4);
string[] tmp2 = letters[middleTwo];
复制代码
当然,你在范围运算符内也可以混用end运算符:
string[] lastThreeLetters = letters[^3..^0]; //E,F,G
string tmp3 = letters[^0]; //IndexOutOfRangeException
复制代码
这里,第一个 ^0 表示数组的末尾,因为范围的结尾是不包含的,因此不会有异常;然而 当做索引,就会产生 IndexOutOfRangeException
异常。
3.小结
当然有些新的类型也支持 倒排索引和范围,具体的类需要参考具体的文档,这里不再赘述。
看完这篇短文,你是不是又掌握了一种精简代码的方式?
感谢有你的陪伴,技术的路上不孤单~~
我是 webmote, 关注我,学习的路上不迷路!
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END