dilluns, 3 d’abril del 2017

Llistes en C#: ArrayList



Una llista és una estructura dinàmica en la qual es pot afegir elements sense tantes restriccions. És habitual que es puguem introduir noves dades en tots dos extrems, així com entre dos elements existents, o bé fins i tot de forma ordenada, de manera que cada nova dada s'introdueix automàticament en la posició adequada perquè tots ells queden en ordre.

En el cas de C#, tenim dues variants especialment útils: una llista als elements de la qual es pot accedir com als d'un array ("ArrayList") i una llista ordenada ("SortedList").

ArrayList

En un ArrayList, podem afegir dades en l'última posició amb "Add", inserir en qualsevol altra amb "Insert", recuperar qualsevol element usant claudàtors (igual que fèiem amb els "arrays"), o fins i tot ordenar tota la llista amb "Sort" (si les dades que hi ha guardats són "fàcils de comparar", però no servirà si són dades més complexes, com un "struct").  Anem a veure alguns dels mètodes podem utilitzar:



Nom
Descripció
Add(Object)
Agrega un objecte al final de ArrayList.
Clear()
Lleva tots els elements de ArrayList.
Clone()
Crea una còpia superficial de la col·lecció ArrayList.
Contains(Object)
Determina si un element es troba en ArrayList.
CopyTo(Array)
Copia la ArrayList completa en una Array unidimensional compatible, començant en el principi de la matriu de destinació.
GetType()
Obté el Type de la instància actual.(Heretat de Object).
Insert(Int32, Object)

Insereix un element en ArrayList, en l'índex especificat.
RemoveAt(Int32)
Lleva l'element situat en l'índex especificat de ArrayList.
Reverse()

Inverteix l'ordre dels elements en la ArrayList completa.
Sort()
Ordena tots els elements de ArrayList.

Exemple:
using System;
using System.Collections;
public class SamplesArrayList  {

   public static void Main()  {

      // Crea i inicialitza un nou ArrayList.
      ArrayList meuAL = new ArrayList();
      meuAL.Add("Hola");
      meuAL.Add("Món");
      meuAL.Add("!");

      // Visualitza les propietats i valors del ArrayList.
      Console.WriteLine( "meuAL" );
      Console.WriteLine( "    Recompte:    {0}", meuAL.Count );
      Console.WriteLine( "    Capacitat: {0}", meuAL.Capacity );
      Console.Write( "    Valors:" );
      PrintValues( meuAL );
   }

   public static void ImprimirValors( IEnumerable meuaLlista )  {
      foreach ( Object obj in meuaLlista )
         Console.Write( "   {0}", obj );
      Console.WriteLine();
   }

}


/* 
Sortida del codi:

meuAL
    Recompte:    3
    Capaacitat: 4
    Valors:   Hola  Món   !

*/
Exercici: Concessionari de vehicles: Cotxes i Motos 
 El programa haurà de llegir un fitxer que conté vehicles (cotxes i motos) emmagatzemats de la següent manera:




En llegir el fitxer s'haurà d'emmagatzemar cada vehicle en una llista genèrica de la classe Vehicle (classe pare) amb els atributs descripció, preu i categoria, cada vehicle serà un Cotxe o una Moto (classes filles) segons corresponga.
 (Per diferenciar-los en la descripció de cada vehicle sempre ha de contenir la paraula cotxe o moto respectivament com es pot veure en el fitxer d'exemple).
 Per assignar una categoria a cada vehicle s'ha de crear una funció que reba el preu de cada vehicle i aquesta assigne una categoria segons aquests criteris:
 Baixa <= 3000
 Mitjana > 3000 i Mitjana <= 10000
 Alta > 10000
 Una vegada tenim la llista amb tots els vehicles emmagatzemats hem de preguntar a l'usuari si vol visualitzar cotxes o motos i que categoria.  Una vegada tenim aquestes dues dades el programa haurà de mostrar a l'usuari els vehicles que compleixen aquestes condicions. Exemple: 


Per a això hem de consultar en la llista de vehicles el tipus de vehicle Cotxe o Moto, podem utilitzar GetType sobre un dels elements de la nostra llista de vehicles (en aquest cas no contemplem l'opció de mirar la descripció). A més de consultar la categoria de cada vehicle. Exemple:

meusVehicles [i] GetType() == typeof(Cotxe)
meusVehicles[i]. GetCategoria()



Cap comentari:

Publica un comentari a l'entrada