C# - Apresentando SortedList
Neste artigo vou apresentar a classe genérica SortedList da linguagem C# |
A classe SortedList representa uma coleção de pares de chave/valor que são classificados pelas chaves e podem ser acessados por chave e por índice. Esta classe está incluída no namespace System.Collection.
Um objeto
SortedList gerencia internamente dois arrays para armazenar os elementos da
lista; ou seja, um array para as chaves e outro array para os valores. Cada
elemento é um par de chave/valor que pode ser
acessado como um objeto DictionaryEntry. Uma chave
não pode ser null, mas um valor pode.
Uma SortedList possui 6 tipos diferentes de construtor como
SortedList(), SortedList(IComparer), etc.
No index SortedList, a sequência é baseada na seqüência de classificação. Quando
um elemento é adicionado, ele é inserido na SortedList na ordem de classificação
correta e a indexação é ajustada de acordo.
Quando um elemento é removido, a indexação também é ajustada de acordo.
Portanto, o índice de um par chave /valor específico pode ser alterado conforme
os elementos são adicionados ou removidos do objeto SortedList.
Elementos nesta coleção podem ser acessados usando um índice inteiro, e, os
índices são baseados em zero.
Podemos usar uma instrução foreach para retornar um
objeto do tipo de elementos na coleção. Como cada elemento do objeto
SortedList é um par chave/valor, o tipo de elemento
não é o tipo da chave ou o tipo do valor. Em vez disso, o tipo de elemento é um
DictionaryEntry.
As principais propriedades desta classe são:
Keys
|
Obtém as chaves
contidas em um objeto SortedList.
|
Values
|
Obtém os valores
contidos no objeto SortedList.
|
Item[Object]
|
Obtém ou atribui o
valor associado com a chave especifica no objeto
SortedList.
|
Capacity
|
Obtém ou atribui a
capacidade ou no. de elementos de um objeto SortedList.
|
Count
|
Obtém o no. de
elementos contidos no objeto SortedList..
|
IsFixedSize
|
Obtém o valor
booleano do SortedList
|
IsReadOnly
|
Obtém o valor
indicando se o
objeto SortedList é
read-only.
|
Os principais métodos desta classe são:
Add(Object, Object)
|
Adiciona um
elemento com a chave e o valor especificados a um objeto
SortedList.
|
Clone()
|
Cria uma cópia
superficial do objeto SortedList.
|
Contains(Object)
|
Determina se o
SortedList contém uma chave específica
|
ContainsKey(Object)
|
Determina se o
SortedList contém uma chave específica
|
ContainsValue(Object)
|
Determina se o
SortedList contém um valor específico
|
IndexOfKey(Object)
|
Retorna o índice
(base zero) da chave especificada
|
IndexOfValue(Object)
|
Retorna o indice
(base zero) da primeira ocorrencia do valor especificado
|
A seguir veremos algumas operações usando esses métodos e propriedades na prática.
recursos usados:
Criando o projeto no VS 2019 Community
Vamos criar um projeto usando a linguagem C# do tipo Console para .NET Core : Console App(.NET Core)
Podemos chamar o projeto de CShp_SortedList1.
1- No primeiro exemplo vamos adicionar números não ordenados a uma SortedList e exibir os elementos usando as propriedades key e value:
private static void Exemplo1()
{
SortedList NumeroSortedList = new SortedList();
//Adiciona itens não ordenados na SortedList.
NumeroSortedList.Add(4, "Quatro");
NumeroSortedList.Add(1, "Um");
NumeroSortedList.Add(3, "Três");
NumeroSortedList.Add(7, "Sete");
NumeroSortedList.Add(5, "Cinco");
NumeroSortedList.Add(6, "Seis");
NumeroSortedList.Add(2, "Dois");
Console.WriteLine("--SortedList (ordenada pela chaves)--");
//podemos usar o laço foreach para percorrer todos os itens
//lendo-os usando as propriedades Key e Value
foreach (DictionaryEntry item in NumeroSortedList)
{
Console.WriteLine($"Key: {item.Key}, Value: {item.Value}");
}
}
|
2- Vamos agora criar uma SortedList usando strings :
private static void Exemplo2()
{
SortedList PaisesSortedList = new SortedList();
//cria uma lista de paises
List<string> PaisesLetra_A = new List<string> { "Angola", "Albania", "Algeria", "Andorra" };
List<string> PaisesLetra_B = new List<string> { "Brasil", "Bolívia", "Bangladesh", "Barbados" };
List<string> PaisesLetra_C = new List<string> { "Camboja", "Colombia", "Canada", "Cabo Verde" };
List<string> PaisesLetra_D = new List<string> { "Dinamarca", "Djibuti", "Dominica"};
List<string> PaisesLetra_E = new List<string> { "Egito", "Equador", "Espanha", "Etiópia" };
// Adiciona itens não ordenados ao SortedList.
PaisesSortedList.Add('A', PaisesLetra_A);
PaisesSortedList.Add('D', PaisesLetra_D);
PaisesSortedList.Add('C', PaisesLetra_C);
PaisesSortedList.Add('B', PaisesLetra_B);
PaisesSortedList.Add('E', PaisesLetra_E);
Console.WriteLine("--Ordem Alfabética Nome do País--");
foreach (DictionaryEntry item in PaisesSortedList)
{
List<string> nomePaises = PaisesSortedList[item.Key] as List<string>;
Console.WriteLine($"Alfabética: {item.Key}, --> Nome do País: {string.Join(", ", nomePaises)}");
}
}
|
Abaixo temos a execução do código acima:
3- Agora veremos um exemplo de como usar Contains(), ContainsKey() e ContainsValue :
private static void Exemplo3()
{
// Cria um SortedList
SortedList mSortedList = new SortedList();
// adiciona itens
mSortedList.Add("j", "Jose");
mSortedList.Add("c", "C#");
mSortedList.Add("m", "Macoratti");
mSortedList.Add("n", "Nenhum");
// Verifia se um objeto SortedList
// contém um valor especifico
Console.WriteLine("A SortedList contém o valor 'Macoratti' ? ");
Console.Write(mSortedList.ContainsValue("Macoratti"));
// contém uma chave especifica
Console.WriteLine("\nA SortedList contém a chave 'j' ? ");
Console.Write(mSortedList.ContainsKey("j"));
//
Console.WriteLine("\nA SortedList contém a chave 'n' ? ");
Console.Write(mSortedList.Contains("n"));
Console.Write("");
}
|
Abaixo vemos o resultado da execução do código acima:
4- Agora veremos um exemplo de como usar Capacity, isFixedSize, IsReadOnly, IndexOfkey e IndexOfValue :
private
static void Exemplo4() { SortedList NumeroSortedList = new SortedList();
//Adiciona itens não ordenados na SortedList.
Console.WriteLine("--Propriedade Capacity --");
} |
A seguir o resultado da execução do código acima:
5- Agora veremos um exemplo de como usar Clear e Count:
private
static void Exemplo5() { SortedList NumeroSortedList = new SortedList();
//Adiciona itens não ordenados na
SortedList.
Console.WriteLine("--Método Clear() e Propriedade Count --");
Console.WriteLine($"Antes de 'NumeroSortedList.Clear()' No. de Itens = {NumeroSortedList.Count}"); |
Abaixo o resultado do código acima:
6 - Para concluir veremos com substituir um valor de um índice especifico e um objeto SortedList.
Vamos substituir os índices 1 e 3 da SortedList criada:
private static void Exemplo6()
{
// cria uma lista SortedList
SortedList minhaLista = new SortedList();
// Incluir elementos
minhaLista.Add("Primeiro", "Bolívia");
minhaLista.Add("Segundo", "Paraguai");
minhaLista.Add("Terceiro", "Venezuela");
minhaLista.Add("Quarto", "Chile");
minhaLista.Add("Quinto", "Uruguai");
// Antes de substituir as chaves e valores
Console.WriteLine("----- Antes de alterar -----");
Console.WriteLine("Index \t\t Keys \t\tValues");
for (int i = 0; i < minhaLista.Count; i++)
{
Console.WriteLine("[{0}]\t\t{1}\t\t{2}", i,
minhaLista.GetKey(i), minhaLista.GetByIndex(i));
}
Console.WriteLine();
// Depois de substituir chaves e valores
Console.WriteLine("----- Depois de alterar -----");
// Substitui os valores no index 1 e index 3
minhaLista.SetByIndex(1, "Brasil");
minhaLista.SetByIndex(3, "Argentina");
Console.WriteLine("Index \t\t Keys \t\tValues");
for (int i = 0; i < minhaLista.Count; i++)
{
Console.WriteLine("[{0}]\t\t{1}\t\t{2}", i,
minhaLista.GetKey(i), minhaLista.GetByIndex(i));
}
}
|
Vemos no código a utililização de Count, GetKey(), GetByIndex() e SetByIndex().
Executando o código teremos:
Pegue o código do projeto aqui : CShp_SortedList1.zip
"E Jesus
clamou, e disse: Quem crê em mim, crê, não em mim, mas naquele que me enviou.
E quem me vê a mim, vê aquele que me enviou.
Eu sou a luz que vim ao mundo, para que todo aquele que crê em mim não permaneça
nas trevas."
João 12:44-46
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET