INDICI

C sharpDato un certo Array a volte risulta sintatticamente scomodo accedere ai suoi elementi. Gli indici e i range introdotti in c sharp 8 semplificano tale gestione. Chiariamo il concetto con una figura:

indici

INDICI

  • È stata introdotta nel namespace System una nuova struct System.Index.
  • È stato introdotto un nuovo operatore il cui simbolo è ^ chiamato (index from end) ossia indice a partire dalla fine.

RANGE

  • È stata introdotta nel namespace System una nuova struct System.Range.
  • È stato introdotto un nuovo operatore il cui simbolo è .. chiamato (range operator) che ci consente di prendere uno slice ossia una fetta di valori.
using System;
namespace IndiciRange
{
    class Program
    {
        static void Main(string[] args)
        {
           //INDICI 
           string[] myArray = {"primo","secondo","terzo","quarto"};
           Index primo = 0;
           Index ultimo = ^1;
           string x = myArray[primo];
           string y = myArray[ultimo];
           Console.WriteLine($"{x} {y}");
           string s1 = myArray[^1];
           string s2 = myArray[^2];
           Console.WriteLine($"{s1} {s2}");
           //RANGE
           string[]a = myArray[..2];/*--partiamo dall'inizio dell'array
                                    e ci fermiamo prima dell'indice specificato 2*/
           foreach(var item in a)
           {
               Console.WriteLine(item);
           }
           string[]b = myArray[2..];/*--Parte dall'indice due compreso fino alla fine*/
           foreach(var item in b)
           {
               Console.WriteLine(item);
           }
           string[]c = myArray[1..3];/*--Parte dall'indice 1 incluso fino all'indice 3 escluso*/
           foreach(var item in c)
           {
               Console.WriteLine(item);
           }
        }
    }
}

APPROFONDIMENTO

In C#, gli indici e i range sono funzionalità introdotte in C# 8.0 che permettono di lavorare con array e stringhe in modo più conveniente. Ecco una spiegazione dettagliata di come funzionano:

Indici

Gli indici rappresentano una posizione in una collezione (come un array o una stringa). In C#, gli indici possono essere sia positivi che negativi:

• Gli indici positivi iniziano da 0 (per il primo elemento) fino a length – 1 (per l’ultimo elemento).

• Gli indici negativi iniziano da -1 (per l’ultimo elemento) fino a -length (per il primo elemento).

C# introduce la struttura Index per rappresentare gli indici. Questa struttura offre un modo conveniente per accedere agli elementi dall’inizio o dalla fine della collezione.

Esempio:

int[] array = { 1, 2, 3, 4, 5 };
Console.WriteLine(array[^1]); // Output: 5 (ultimo elemento)

Range

Un range rappresenta una sottosezione di una collezione. In C#, i range sono rappresentati dalla struttura Range, che utilizza due indici per specificare l’inizio e la fine del range.

Esempio:

int[] array = { 1, 2, 3, 4, 5 };
int[] subArray = array[1..3]; // Contiene gli elementi da array[1] a array[2], escluso array[3]
foreach (var item in subArray)
{
Console.WriteLine(item); // Output: 2 3
}

Sintassi degli Indici e dei Range

• Per creare un indice dall’inizio della collezione: Index index = 0;

• Per creare un indice dalla fine della collezione: Index index = ^1;

• Per creare un range che include gli elementi dall’indice 1 all’indice 3 (escluso): Range range = 1..3;

• Per creare un range che include tutti gli elementi dall’indice 1 fino alla fine: Range range = 1..;

• Per creare un range che include tutti gli elementi dall’inizio fino all’indice 3 (escluso): Range range = ..3;

• Per creare un range che include tutti gli elementi: Range range = ..;

Esempi Pratici

Utilizzo di Indici

string text = “Hello, World!“;
char lastChar = text[^1]; // Ottiene l’ultimo carattere ‘!’
char secondLastChar = text[^2]; // Ottiene il penultimo carattere ‘d’
Console.WriteLine(lastChar); // Output: !
Console.WriteLine(secondLastChar); // Output: d

Utilizzo di Range

string text = “Hello, World!“;
string subText = text[7..12]; // Ottiene la sottostringa “World”
Console.WriteLine(subText); // Output: World

int[] numbers = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int[] subArray = numbers[3..7]; // Ottiene gli elementi {3, 4, 5, 6}
foreach (var number in subArray)
{
        Console.WriteLine(number); // Output: 3 4 5 6
}

LINK AI PRECEDENTI POST

LINK AL CODICE SU GITHUB