C# - Tornando um tipo Searchable
Hoje veremos como fazer para tornar um tipo Searchable na linguagem C#. |
Suponha que você tenha um tipo de dados que será armazenada como elementos em uma lista List<T> e você gostaria de usar o método BinarySearch para permitir uma pesquisa customizada de seus tipos de dados na lista.
Podemos usar as interfaces IComparable<T> ou IComparer<T> definindo um implementação específica.
Assim basta o Tipo implementar a interface IComparable<T> ou IComparer<T> de tal forma que as coleções List<T> e SortedList <K, V> poderão ordenar e pesquisar uma matriz ou coleção de objetos do Tipo desejado.
Os algoritmos de pesquisa são integrados a essas duas classes; tudo que você precisa fazer é contar a elas como pesquisar suas classes por meio do código quando você implementar IComparable<T> via método CompareTo.
A classe List<T> fornece um método BinarySearch para realizar uma pesquisa nos elementos dessa lista. Os elementos são comparados com um objeto passado para o método BinarySearch no parâmetro do objeto.
A classe SortedList não tem um método BinarySearch de pesquisa; em vez disso, ela possui o método ContainsKey, que executa uma pesquisa binária na chave contida na lista.
O método ContainsValue da classe SortedList executa uma pesquisa linear ao pesquisar valores. Esta pesquisa linear usa o método Equals dos elementos na coleção SortedList para fazer seu trabalho.
Os métodos Compare e CompareTo não têm nenhum efeito na operação da pesquisa linear realizada na classe SortedList, mas eles têm um efeito na pesquisa binária.
Assim neste exemplo vamos implementar a interface IComparable<T> na classe e e usar as as rotinas de pesquisa das classes List<T> e SortedList<K, V>.
Vejamos a aplicação disso em um cenário prático.
Vamos criar um projeto Console do tipo .Net Core e a seguir criar uma classe Quadrado no projeto:
A seguir vamos criar uma classe ComparaAlturaQuadrado que implementa a interface IComparer<T> onde vamos comparar as alturas de 2 objetos quadrado para realizar a ordenação.
Agora basta definir um método onde vamos criar uma lista de objetos Quadrado que desejamos ordenar e definir uma instância da classe ComparaAlturaQuadrado como sendo do tipo IComparer<Quadrado>.
Para ordenar usamos o método Sort da lista :
Executando o código teremos o resultado abaixo exibindo a lista original e a
lista ordenada:
Pegue o projeto aqui:
CShp_Searchable.zip "Bom é ter esperança, e aguardar em silêncio a salvação do Senhor."
Referências:
C# - Tasks x Threads.
Qual a diferença
C# - Programação
Assíncrona como : Asycn e Task
C# - O Struct Guid - Macoratti.net
Lamentações 3:26
VB .NET - Datas,
horas: conceitos e operações
O tratamento de datas
no VB.NET - Macoratti.net
C# - Obtendo a data e
a hora por TimeZone
DateTime -
Macoratti.net
Formatação de data e
hora para uma cultura
C# - Calculando a
diferença entre duas datas
C# - Fundamentos :
Definindo DateTime como Null