Sobre a classe
A classe SortedList funciona, em parte, de forma semelhante ao Hashtable, onde os elementos são compostos por pares chave/valor. Porém, a principal diferença é que, como o nome sugere, o SortedList é uma lista ordenada. Os elementos são automaticamente ordenados pelas chaves no momento em que são inseridos na coleção.
Vale observar que, como no Hashtable, as chaves devem ser valores únicos.
Quando as chaves são de tipos básicos como int ou string, a ordenação é feita sem que precisemos intervir. Porém, caso se deseje usar chaves de tipos complexos como classes customizadas, é necessário fornecer, no construtor do SortedList, um objeto IComparer específico.
Principais propriedades
- Capacity: Um valor inteiro que define a capacidade da lista, ou seja, o número máximo de itens que podem ser inseridos na coleção.
- Count: Também é um valor do tipo int que retorna (não pode ser alterada diretamente) a quantidade de itens atualmente constantes na lista.
- IsFixedSize: É um valor booleano que, quando verdadeiro, indica que a lista não pode ter itens adicionados ou removidos, apenas é permitido alterar os itens existentes.
- IsReadOnly: Também booleano, esta propriedade indica se a coleção pode ser alterada.
- Keys: Apenas para leitura, retorna uma coleção com as chaves contidas na lista.
- Values: Assim como a anterior, é uma lista do tipo ICollection que contém os valores da lista (lembrando que a coleção é formada por pares chave/valor)
Principais métodos
- Add: Recebe dois parâmetros do tipo object que devem ser inseridos na coleção, formando um par chave/valor.
- Clear: Como se pode imaginar, esse método limpa a lista, removendo todos os itens existentes.
- Contains: Recebe como parâmetro um objeto a ser localizado na lista de chaves e retorna true caso a chave exista. Caso contrário, o retorno é false.
- ContainsKey: Funciona exatamente como o método anterior, retornando um valor booleano indicando se uma chave (passada como parâmetro) existe na lista.
- ContainsValue: Semelhante aos dois métodos anteriores, com a diferença de que o objeto passado como parâmetro é procurado entre a lista de valores e não de chaves.
- CopyTo: Copia os valores da coleção para um vetor unidimensional (primeiro parâmetro), iniciando a partir de um certo índice (segundo parâmetro).
- GetByIndex: Recebe um parâmetro do tipo inteiro e retorna um objeto representando o valor contido na posição indicada.
- GetKey: Retorna a chave contida na posição passada como parâmetro (valor inteiro).
- GetKeyList: Este método retorna uma coleção do tipo IList contendo todas as chaves da lista.
- GetValueList: Também retorna uma coleção de objetos do tipo IList, mas contendo os valores e não as chaves, como o anterior.
- IndexOfKey: Através desse método, é possível obter o índice do item na lista a partir de sua chave, a qual é passada como parâmetro.
- IndexOfValue: Semelhante ao anterior, o retorno desse método é o índice na lista do item cujo valor é passado como parâmetro.
- Remove: Recebe como argumento uma chave e remove da lista o item correspondente.
- RemoveAt: Remove da lista o item cujo índice é informado como argumento do método.
- SetByIndex: Este método recebe dois argumentos: um índice (do tipo inteiro) e um objeto (object). O valor do item na posição indicada passa a ser o objeto passado como segundo argumento.
Exemplo prático
A seguir é exibido um exemplo de uso da classe SortedList. São inseridos alguns itens de forma desordenada e, em seguida, toda a lista é exibida na tela.
static void Main(string[] args) { SortedList lista = new SortedList(); lista.Add(4, "Quarto"); lista.Add(1, "Primeiro"); lista.Add(2, "Segundo"); lista.Add(3, "Terceiro"); foreach (object chave in lista.Keys) { Console.WriteLine("{0} - {1}", chave.ToString(), lista[chave].ToString()); } Console.Read(); }
O resultado é exibido a Figura 1.
Como se vê, os itens são automaticamente ordenados segundo sua chave.
Conclusão
A classe SortedList, assim como as demais do namespace System.Collections facilita o trabalho com coleções de objetos, tornando prática a adição, exclusão, localização e, neste caso, a ordenação.
Espero que o conteúdo aqui exposto possa ser útil aos desenvolvedores e que trabalham com o .NET Framework.
Fico por aqui. Até a próxima!