C# - Testando sua habilidade na resolução de um problema - II


Hoje vamos resolver o exercício proposto na semana anterior.


A solução para o problema proposto é apenas uma sugestão de solução, visto que, podem existir diversas formas de resolver o problema chegando ao mesmo resultado final.

 

Resolução do problema

 

Para resolver o problema proposto vamos usar os recursos do LINQ fazendo uma consulta usando a sintaxe de consulta e realizar o agrupamento de elementos usando a cláusula Group.

 

A cláusula Group retorna uma sequência de objetos IGrouping<TKey,TElement> que contêm zero ou mais itens que correspondem ao valor de chave do grupo.

Um objeto que implementa IGrouping basicamente tem dois elementos em sua estrutura:

Vamos criar uma aplicação do tipo Console App(.NET Framework) no Visual Studio 2017 Community com o nome de CShp_Exercicio1.

 

A seguir temos o código do projeto :

 

using System.Linq;
using static System.Console;

namespace CShp_Exercicio1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] numeros = new int[] { 5, 9, 1, 2, 3, 7, 5, 6, 7, 3, 7, 6, 8, 5, 4, 9, 6, 2, 8, 1, 3, 9, 4, 2, 7, 6,
                                                3, 1, 5, 7, 8, 9 };

            Write("\nLINQ : Exibindo o número e a sua frequência para um dado array : \n");
            Write("---------------------------------------------------------------------\n");
            Write("\nOs números no array são :  : \n");
            ExibeNumeros(numeros);

            var numerosFrequencia = from numero in numeros
                                              group numero by numero into numerosAgrupados
                                              select numerosAgrupados;

            WriteLine("\n\nO número e a frequência são : \n");

            foreach (var numero in numerosFrequencia)
            {
                WriteLine($"O número {numero.Key} aparece {numero.Count()} vezes");
            }
            ReadLine();
        }

        static void ExibeNumeros(int[] numeros)
        {
            foreach (var numero in numeros)
            {
                Write($" {numero} ");
            }
        }
    }
}

 

Executando o projeto iremos obter o resultado a seguir:

 


 

Agora vamos entender como funciona a cláusula Group da LINQ.

 

Usamos a cláusula Group na consulta LINQ usada para realizar o agrupamento de elementos com base em um critério. No nosso caso usamos o próprio número como critério.

 

Para o nosso exemplo o número é a chave(numero.Key) e a quantidade que ele aparece no grupo é obtida usando o método Count (numero.Count).

 

O agrupamento é um dos recursos mais poderosos do LINQ, e, podemos agrupar dados da seguintes formas:

Na consulta estamos usando a palavra-chave into com group, pois ao usar into, é necessário continuar a consulta, e, no nosso exemplo finalizamos a consulta com uma instrução select.

Para o exemplo isso não seria necessário, e, nossa consulta poderia ser escrita da seguinta forma:

  var numerosFrequencia = from numero in numeros
                                        group numero by numero;

 

Pois não estamos fazendo nenhuma operação após realizar o agrupamento.

Pegue o código do projeto aqui : CShp_Exercicio1.txt

"Porque o reino de Deus não é comida nem bebida, mas justiça, e paz, e alegria no Espírito Santo."
Romanos 14:17

 

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?


Referências:


José Carlos Macoratti