Creare array o list dinamicamente

giovedì 17 aprile 2008 - 12.26

TaiChi Profilo | Junior Member

Salve a tutti,

in una classe ho bisogno di creare degli Array o anche delle List<string>
in modo dinamico, li dovrò usare per memorizzare dei valori stringa,
conosco solo la dimensione che dovranno avere ma non quanti dovranno
essere.

li creerò in un metodo ma dovranno essere visibili a tutta la classe; per
comodità pensavo di attribuire un nome univoco differenziato per un numero
progressivo, provo a spiegarmi:


public void ExtractWeek()

int i = 0;
if (condizione)
{
//faccio qualcosa
}
else if (condizione)
{
//faccio qualcos'altro
}
else
{
i++;
//qui creo l'array che dovrebbe avere un nome tipo
//arrWeek con l'aggiunta di i in modo di avere
//arrWeek1, arrWeek2, arrWeek3 e così via fino a quando serve
crearli
//oppure List non importa
}

Come posso fare a crearli con questo tipo di nome e come farli vedere a
tutta la classe?

Grazie
Alessio Forconi

aiedail92 Profilo | Expert

Ciao

Potresti usare una List<List<string>>, ossia una list contenente come oggetti delle liste di stringhe. In questo modo puoi accedere ad ogni lista di stringhe (le tue arrWeek1, arrWeek2 ecc) semplicemente con l'indicizzatore, e per renderlo visibile a tutta la classe basta dichiararlo in ambito globale:

class TuaClasse { private List<List<string>> arrWeek = new List<List<string>>(); public void ExtractWeek() { //... //Lo usi per definire ciascuna //delle list contenute in arrWeek List<string> tmp = new List<string>(); tmp.Add("List1, oggetto1"); tmp.Add("List1, oggetto2"); //... arrWeek.Add(tmp); tmp = new List<string>(); tmp.Add("List2, oggetto1"); tmp.Add("List2, oggetto2"); //... arrWeek.Add(tmp); //... } }

Quindi, per accedere a ciascuna delle list, usi arrWeek[i]

Luca

Wamba Profilo | Expert

Se non ho capito male devi realizzare una matrice dinamica con array di dimensione variabile.
Puoi usare un List<List<TipochetiServe>> Oppure se hai bisogno delle chiavi: Dictionary<int, Dictionary<int, TipochetiServe>>.
In altre parole realizzi una collection che come tipo dato ha una collection.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

Wamba Profilo | Expert

Ovviamente sono arrivato 30 secondi dopo con la risposta Sorry.
Cmq, sono contento che abbiamo dato una soluzione simile.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

aiedail92 Profilo | Expert

Niente di cui scusarsi...

Alla prossima

Luca

TaiChi Profilo | Junior Member

Grazie di cuore a tutti e due.
Alessio Forconi

Wamba Profilo | Expert

Di niente figurati.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

TaiChi Profilo | Junior Member

Dunque ho provato ad applicare il vostro suggerimento in questo modo:

List<List<string>> listWeek = new List<List<string>>();

public void ExtractWeek()
{
ReadFile();
Regex regex = new Regex(@"\b\d{6}\b|{.*?}|\[.*?]", RegexOptions.
Multiline);

MatchCollection matches = regex.Matches(fileRead);

List<string> tmpList = new List<string>();
int i = 0;
foreach (Match match in matches)
{
//match.Value; // Il valore ottenuto (incluse le
parentesi)
//match.Index; // L'indice in base 0 del match
//match.Length; // La lunghezza del match ottenuto

switch (match.Value[0])
{
case '{':
MessageBox.Show("Graffe: --> " + match.
Value);
tmpList.Add(match.Value);
break;
case '[':
MessageBox.Show("Quadre: --> " + match.
Value);
tmpList.Add(match.Value);
break;
default:
i++;
MessageBox.Show("Data!!! --> " + i.
ToString () + " --> " + " " + match.Value);
string WeekValue = string.Format(
"arrWeek{0} {1}", i.ToString(), match.Value);
tmpList.Add(WeekValue);
MessageBox.Show(WeekValue);
break;
}
}
listWeek.Add(tmpList);
}


in queste liste devo inserire i valori dei match man mano che la regex li
trova secondo l'ordine in cui sono trovati che è quello che mi interessa.

Provo a fare un esempio,

posto che i valori sono questi, non fate caso alle righe, in realtà è una
riga unica:

080107*{Introduzione a Matteo} [si pp.175-7 §§1-10]*[Matteo 1-6]*[Matteo
5:1-20]*{Perché gli esseri umani muoiono?}*[rs pp.232-4 §3]*{In quali modi
ci aiuta lo spirito santo di Dio}*{Fornite le spiegazioni necessarie}*[be
p.228 §2-3]

080114*{Provate dilleto nella Parola di Dio}*[be p.9 §§1-5]*[Matteo
7-11]*[Matteo 10:1-23]*{Perché vale la pena di essere onesti}*{Dove sono i
morti, e in che condizione si trovano?}[rs p.234 §4 - p.236 §2]*{Vi è
implicato il cuore}*}*[be p.228 §§4-6]*229§1]

080121*{Leggere la Bibbia ogni giorno}*[be p.10 §1 - p.12 §3]*[Matteo
12-15]*[Matteo 14:1-22]*{Perché i T.di G. non seguono le...tradizionali
del lutto?}[rs p.236§3-237§7]*{Chi è cos'è
l'anticristo?}*st?}*{Informativo per l'uditorio}*}*[be p.230 §§1-6]

080128*{"Prestate attenzione a come ascoltate"}*[be p.13 §1 - p.14
§5]*[Matteo 16-21]*[Matteo 17:1-20]*{Come rispondere a chi ha idee errate
sulla morte}[rs p.238 §§1-3]*104 ¶1]*{Cose che i cristiani considerano
sacre}*{Rendete informativo il discorso facendo ricerche}[be p.231 §§1-3]

080204*{Come ascoltare alle adunanze e alle*}*assemblee}[be p.15 §1 - p.16
§5]*[Matteo 22-25]*[Matteo 23:1-24]*{La vita eterna non sarà
noiosa}*ing}*{Sogni: ispirati e di altro genere}*[rs pp.362-3
§7]*{Spiegate i versetti biblici}*[be p.231 §§4-5]

080211*{Matteo: Perché è utile}*[si pp.180-1 §§29-33]*[Matteo
26-28]*[Matteo 27:1-22]*{Perché avere fede non significa solo credere}*{La
Bibbia vieta l'uso di droga?}*ans}*[rs pp.116-17 §3]*{Spiegate il
significato dei termini}*[be p.232 §1]

080218*{Introduzione a Marco}*[si pp.181-3 §1-11]*[Marco 1-4]*[Marco
2:1-17]*{Perché i cristiani non fanno uso di marijuana}[rs p.118 §1 -
p.119 §1]*{L'amore infonde coraggio}*ge}*{Ragionate sui versetti
biblici}*[be p.232 §§2-4]

080225*Ripetizione*[Marco 5-8]*{Scegliete informazioni... di beneficio*per
gli ascoltatori}[be

la lista tmp1 dovrà contenere nell'ordine questi valori:
080107
{Introduzione a Matteo}
[si pp.175-7 §§1-10]
[Matteo 1-6]
[Matteo 5:1-20]
{Perché gli esseri umani muoiono?}
[rs pp.232-4 §3]
{In quali modi ci aiuta lo spirito santo di Dio}
{Fornite le spiegazioni necessarie}
[be p.228 §2-3]

e così via per la lista tmp2 con la riga successiva fino ad esaurimento
della stringa che è molto più lunga.

Spero di essere stato chiaro, in caso chiedete pure delucidazioni.

Grazie per l'aiuto e la disponibilità
Alessio Forconi

aiedail92 Profilo | Expert

Dunque, io procederei nel seguente modo:

List<List<string>> listWeek = new List<List<string>>(); public void ExtractWeek() { ReadFile(); Regex regex = new Regex(@"\b\d{6}\b|{.*?}|\[.*?]", RegexOptions.Singleline); MatchCollection matches = regex.Matches(fileRead); List<string> tmpList = new List<string>(); foreach (Match match in matches) { switch (match.Value[0]) { case '{': case '[': //Se graffe o quadre aggiunge //il match a tmpList e continua tmpList.Add(match.Value); break; default: //Se è una data aggiunge tmpList //a listWeek, reinizializza tmpList //e aggiunge la data al nuovo tmpList if (tmpList.Count > 0) { listWeek.Add(tmpList); tmpList = new List<string>(); } tmpList.Add(match.Value); break; } } }

Edit: Ho corretto un paio di bug nel codice ↑

Luca
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5