Fatiamento de array em C#

Muhammad Maisam Abbas 16 fevereiro 2024
  1. Fatiamento de array com o método Linq em C#
  2. Fatiamento de array com a classe ArraySegment em C#
  3. Fatiamento de array com uma função de extensão em C#
Fatiamento de array em C#

Este tutorial irá apresentar os métodos para dividir um array em C#.

Fatiamento de array com o método Linq em C#

O processo de divisão de um array em uma submatriz menor é conhecido como divisão de array. O Linq é usado para integrar a funcionalidade de consulta com as estruturas de dados em C#. A função Take(x) do Linq copia o número x de elementos desde o início de uma estrutura de dados. O exemplo de código a seguir nos mostra como podemos dividir um array com o Linq em 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);
      }
    }
  }
}

Resultado:

one two

Inicializamos o array de strings foo e o dividimos em outro array de strings - bar, contendo os dois primeiros elementos do array foo. Esse método é muito limitado porque só podemos dividir os elementos iniciais do array com esse método.

Fatiamento de array com a classe ArraySegment em C#

A classe ArraySegment é usada para dividir um array em uma submatriz em C#. O Construtor da classe ArraySegment pega a matriz a ser segmentada, o índice inicial e o número de elementos a serem segmentados e nos dá uma submatriz. O exemplo de código a seguir nos mostra como podemos dividir um array com a classe ArraySegment em 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);
      }
    }
  }
}

Resultado:

three four five

Inicializamos a matriz de strings a e dividimos em uma submatriz slice contendo 3 elementos a partir do índice 2 do array a com o construtor da classe ArraySegment. É uma abordagem melhor porque podemos cortar um array do meio com essa abordagem.

Fatiamento de array com uma função de extensão em C#

Os métodos de extensão nos permitem adicionar funções a tipos de dados existentes sem declarar um tipo de dados personalizado. Também podemos definir um método de extensão definido pelo usuário em vez de um método interno para dividir um array em C#. Este método de extensão pode pegar o índice inicial e final da fatia e retornar a submatriz dentro deste intervalo. O exemplo de código a seguir nos mostra como definir uma função de extensão para dividir um array em 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);
      }
    }
  }
}

Resultado:

three four five

Criamos um método de extensão, Slice(), que pega o índice inicial e final da fatia e retorna a submatriz fatiada. Inicializamos a matriz de strings values e dividimos na matriz slice contendo valores do índice 2 ao índice 4 do 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

Artigo relacionado - Csharp Array