C# 8.0 - Ranges & Indices
نویسنده: وحید نصیری
تاریخ: ۱۳۹۸/۰۳/۱۰ ۱۱:۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
var integerArray = new int[3]; var lastItem = integerArray[integerArray.Length - 1];
var integerList = integerArray.ToList(); integerList.Last();
var secondToLast = integerArray[integerArray.Length - 2];
var lastItem = integerArray[^1];
var words = new string[]
{
// index from start index from end
"The", // 0 ^9
"quick", // 1 ^8
"brown", // 2 ^7
"fox", // 3 ^6
"jumped", // 4 ^5
"over", // 5 ^4
"the", // 6 ^3
"lazy", // 7 ^2
"dog" // 8 ^1
}; // 9 (or words.Length) ^0 Console.WriteLine($"The last word is {words[words.Length - 1]}");
var index = new Index(value: 1, fromEnd: true); Index indexStruct = ^1; var indexShortHand = ^1;
int[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Console.WriteLine(a[a.Length – 2]); // will write 8 on console.
Console.WriteLine(a[^2]); // will write 8 on console.
Index i5 = 5;
Console.WriteLine(a[i5]); //will write 5 on console.
Index i2fromEnd = ^2;
Console.WriteLine(a[i2fromEnd]); // will write 8 on console. var numbers = Enumerable.Range(1, 10).ToArray();
var (start, end) = (1, 7); var length = end - start; // Using LINQ var subset1 = numbers.Skip(start).Take(length); // Or using Array.Copy var subset2 = new int[length]; Array.Copy(numbers, start, subset2, 0, length);
var myArray = new string[] { "Item1", "Item2", "Item3", "Item4", "Item5" }; var fromIndexToX = myArray[1..3]; // = [Item2, Item3]
var fromIndexToXFromTheEnd = myArray[1..^1]; // = [ "Item2", "Item3", "Item4" ]
var fromAnIndexToTheEnd = myArray[1..]; // = [ "Item2", "Item3", "Item4", "Item5" ]
var fromTheStartToAnIndex = myArray[..3]; // = [ "Item1", "Item2", "Item3" ]
var entireRange = myArray[..]; // = [ "Item1", "Item2", "Item3", "Item4", "Item5" ]
var myArray = new string[] { "Item1", "Item2", "Item3", "Item4", "Item5" };
for (int i = 1; i <= 3; i++)
{
Console.WriteLine(myArray[i]);
} foreach (var item in myArray[1..4]) // = [ "Item2", "Item3", "Item4" ]
{
Console.WriteLine(item);
} using System;
using System.Linq;
namespace ConsoleApp
{
class Program
{
private static readonly int[] _numbers = Enumerable.Range(1, 10).ToArray();
static void Main()
{
var skip2CharactersAndTake2Characters = _numbers[2..4]; // صرفنظر کردن از دو عنصر اول و سپس انتخاب دو عنصر
var skipFirstAndLastCharacter = _numbers[1..^1]; // صرفنظر کردن از دو عنصر اول و آخر
var last3Characters = _numbers[^3..]; // انتخاب بازهای شامل سه عنصر آخر
var first4Characters = _numbers[0..4]; // دریافت بازهای از 4 عنصر اول
var rangeStartFrom2 = _numbers[2..]; // دریافت بازهای شروع شده از المان دوم تا آخر
var skipLast3Characters = _numbers[..^3]; // صرفنظر کردن از سه المان آخر
var rangeAll = _numbers[..]; // انتخاب کل بازه
}
}
} var range = new Range(1, 4); Range rangeStruct = 1..4; var rangeShortHand = 1..4;
using System;
using System.Linq;
namespace ConsoleApp
{
class Program
{
private static readonly int[] _numbers = Enumerable.Range(1, 10).ToArray();
static void Print(Range range) => Console.WriteLine($"{range} => {string.Join(", ", _numbers[range])}");
static void Main()
{
Print(1..3); // 1..3 => 2, 3
Print(..3); // 0..3 => 1, 2, 3
Print(3..); // 3..^0 => 4, 5, 6, 7, 8, 9, 10
Print(1..^1); // 1..^1 => 2, 3, 4, 5, 6, 7, 8, 9
Print(^2..^1); // ^2..^1 => 9
}
}
} Console.WriteLine("123456789"[1..4]); // Would output 234 var helloWorldStr = "Hello, World!"; var hello = helloWorldStr[..5]; Console.WriteLine(hello); // Output: Hello var world = helloWorldStr[7..]; Console.WriteLine(world); // Output: World! var world2 = helloWorldStr[^6..]; // Take the last 6 characters Console.WriteLine(world); // Output: World!
var arr = (new[] { 1, 4, 8, 11, 19, 31 }).AsSpan();
var range = arr[2..5];
ref int elt1 = ref range[1];
elt1 = -1;
int copiedElement = range[2];
copiedElement = -2;
Console.WriteLine($"range[1]: {range[1]}, range[2]: {range[2]}"); // output: range[1]: -1, range[2]: 19
Console.WriteLine($"arr[3]: {arr[3]}, arr[4]: {arr[4]}"); // output: arr[3]: -1, arr[4]: 19 list.Skip(10).Take(5)
list.Take(10..15)
list.Take(^10..)
list.ElementAt(^1)
از زمان C# 8x میتوان از شیء Range در متد Take نیز استفاده کرد:
# Use the Index Operator dotnet_diagnostic.IDE0056.severity = warning