Slicing di array in C#

Muhammad Maisam Abbas 12 ottobre 2023
  1. Slicing di array con il metodo Linq in C#
  2. Slicing di array con la classe ArraySegment in C#
  3. Slicing di array con una funzione di estensione in C#
Slicing di array in C#

Questo tutorial introdurrà i metodi per suddividere un array in C#.

Slicing di array con il metodo Linq in C#

Il processo di suddivisione di un array in un sotto-array più piccolo è noto come affettatura di array. Linq viene utilizzato per integrare la funzionalità di query con le strutture dati in C#. La funzione Take(x) di Linq copia il numero x di elementi dall’inizio di una struttura dati. Il seguente esempio di codice ci mostra come possiamo suddividere un array con Linq in C#.

using System;
using System.Linq;

namespace array_slicing {
  class Program {
    static void Main(string[] args) {
      string[] foo = { "one", "two", "three", "four", "five" };

      string[] bar = foo.Take(2).ToArray();
      foreach (var e in bar) {
        Console.WriteLine(e);
      }
    }
  }
}

Produzione:

one two

Abbiamo inizializzato l’array di stringhe foo e lo abbiamo suddiviso in un altro array di stringhe - bar, contenente i primi due elementi dell’array foo. Questo metodo è molto limitato perché possiamo solo suddividere gli elementi iniziali dell’array con questo metodo.

Slicing di array con la classe ArraySegment in C#

La classe ArraySegment viene utilizzata per suddividere un array in un sotto-array in C#. Il Costruttore della classe ArraySegment prende l’array da segmentare, l’indice iniziale e il numero di elementi da segmentare e ci fornisce un sotto-array. Il seguente esempio di codice ci mostra come possiamo suddividere un array con la classe ArraySegment in C#.

using System;
using System.Linq;

namespace array_slicing {
  class Program {
    static void Main(string[] args) {
      string[] a = { "one", "two", "three", "four", "five" };
      var segment = new ArraySegment<string>(a, 2, 3);
      foreach (var s in segment) {
        Console.WriteLine(s);
      }
    }
  }
}

Produzione:

three four five

Abbiamo inizializzato l’array di stringhe a e lo abbiamo suddiviso in un sotto-array slice contenente 3 elementi a partire dall’indice 2 dell’array a con il costruttore della classe ArraySegment. È un approccio migliore perché possiamo tagliare un array dal centro con questo approccio.

Slicing di array con una funzione di estensione in C#

I metodi di estensione ci consentono di aggiungere funzioni ai tipi di dati esistenti senza dichiarare un tipo di dati personalizzato. Possiamo anche definire un metodo di estensione definito dall’utente invece di un metodo integrato per affettare un array in C#. Questo metodo di estensione può prendere l’indice iniziale e finale della fetta e restituire il sotto-array all’interno di questo intervallo. L’esempio di codice seguente mostra come definire una funzione di estensione per suddividere una matrice in C#.

using System;
using System.Collections.Generic;

namespace iterate_through_a_list {
  public static class Extensions {
    public static T[] Slice<T>(this T[] source, int start, int end) {
      if (end < 0) {
        end = source.Length + end;
      }
      int len = end - start;

      T[] res = new T[len];
      for (int i = 0; i < len; i++) {
        res[i] = source[i + start];
      }
      return res;
    }
  }
  class Program {
    static void Main(string[] args) {
      string[] values = { "one", "two", "three", "four", "five" };
      string[] slice = values.Slice(2, 4);
      foreach (var s in slice) {
        Console.WriteLine(s);
      }
    }
  }
}

Produzione:

three four five

Abbiamo creato un metodo di estensione, Slice(), che prende l’indice iniziale e finale della fetta e restituisce il sotto-array suddiviso in porzioni. Abbiamo inizializzato l’array di stringhe values e lo abbiamo suddiviso nell’array slice contenente i valori dall’indice 2 all’indice 4 dell’array values.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

Articolo correlato - Csharp Array