Autore Topic: c# Vettore dinamico  (Letto 1785 volte)

tonywhite

  • Visitatore
c# Vettore dinamico
« il: Luglio 22, 2010, 11:39:53 am »
C#iao a tutti!
Oggi, da bravo nabbo, cercavo di capire quale fosse la classe che definisce un vettore dinamico in C# come fa Java con Vector. L'ho trovata ed è System.Collections.ArrayList. Ma ho riscontrato due piccole dieffe:renze:
1) Per leggere da un indice è necessario utilizzare l'enumeratore (System.Collections.IEnumerator)
2) Non è possibile cambiare al volo un oggetto situato in un indice X.

Siccome ho più di un vettore dinamico da gestire e mi scoccia creare dei metodi appositi per ognuno di essi, ho deciso di creare una classe Vettore, figlia di ArrayList e con paio di cosette in più ma voi siete dei grandi pervertiti e troverete il doppio senso anche in questa frase

Codice: [Seleziona]
using System;
using System.Collections;
namespace TUO_NAMESPACE
{
public class Vettore : ArrayList
{
public Vettore ()
{
// Metodo vuoto
}

// Ritorna l'oggetto contenuto all'indice specificato
public Object getItem(int indice)
{
IEnumerator enumeratore = this.GetEnumerator(indice, 1);
enumeratore.MoveNext();
return enumeratore.Current;
}

// Ritorna l'ultimo oggetto
public Object getLastItem()
{
IEnumerator enumeratore = this.GetEnumerator(this.Count -1, 1);
enumeratore.MoveNext();
return enumeratore.Current;
}

// Modifica l'oggetto contenuto all'indice specificato
public void setItem(int indice, Object oggetto)
{
this.Insert(indice, oggetto);
this.RemoveAt(indice+1);
}
}
}

Ora potete creare oggetti di tipo Vettore e gestirli facilmente

Pillole di codice
Codice: [Seleziona]
// Istanziare l'oggetto
Vettore pecore;

// Inizializzare l'oggetto
pecore = new Vettore();

// Aggiungere gli oggetti
pecore.Add("Genoveffa");
pecore.Add("Sigismonda");
pecore.Add("Germenefrasia");
pecore.Add("D&G");

// Sostituire un elemento che non appartiene all'insieme
pecore.setItem(0, "Lola");

// Leggere un singolo oggetto
System.Console.WriteLine("Ma è quello della " + pecore.getItem(0) + "!");

// Stampare facilmente gli oggetti contenuti
for (int i=0; i<pecore.Count; i++)
{
System.Console.WriteLine(pecore.getItem(i));
}

// Leggere l'ultimo oggetto
System.Console.WriteLine(pecore.getLastItem());

Buon lavoro ;)
« Ultima modifica: Luglio 24, 2010, 07:10:18 am da Tony White »

turlando

  • Visitatore
Re:c# Vettore dinamico
« Risposta #1 il: Luglio 22, 2010, 12:30:58 pm »
Tony, perché non fai un libretto con tutti questi appunti?

(click to show/hide)

tonywhite

  • Visitatore
Re:c# Vettore dinamico
« Risposta #2 il: Luglio 22, 2010, 01:00:46 pm »
Uso questo forum come appunti. Quando trovo qualcosa di diverso dal Java, la posto quì.

Per ora solo 2 post: significa che mi sento vicino casa  ;D


P.S.
Grazie! +1
« Ultima modifica: Luglio 22, 2010, 01:04:11 pm da Tony White »

turlando

  • Visitatore
Re:c# Vettore dinamico
« Risposta #3 il: Luglio 22, 2010, 01:07:19 pm »

tonywhite

  • Visitatore
Re:c# Vettore dinamico
« Risposta #4 il: Luglio 24, 2010, 07:19:00 am »
AGGIORNAMENTO

Bug sul Vettore.Cout Quando si aggiunge un elemento non si aggiorna il Count. Più che bug... un errore colossale. CORRETTO.

Metodo Vettore.getLastItem() Una piccola comodità  sempre utile.