|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2003
Città: Ascoli Piceno
Messaggi: 5159
|
[c#] Array multidimensionali..o no?
Ciao
debbo creare una struttura dati che mi consenta di rappresentare 2 campi: il primo il nome della proprietà, il secondo il valore della proprietà,ambedue stringhe. ognuna deve essere collegata all'altra(ad esempio la proprietà"nome" e il valore associato"file.doc") pensavo di creare una struttura di questo tipo: elemento[1,1] = nome1 elemento[1,2] = valore1 elemento[2,1] = nome2 elemento[2,2] = valore2 elemento[n,1] = nomen elemento[n,2] = valoren e di creare i relativi metodi di utilizzo. a questo proposito volevo utilizzare array multidimensionali, di "larghezza" 2 e di altezza n. Infatti il risultato è proprio una matrice di stringhe, quindi pensavo il tipo di dati fosse adeguato. ora ho un problema però: mi dite come faccio ad allocare "volta per volta" gli elementi (nome e valore) visto che non posso saperli a priori? si dovrebbe poter fare qualcosa del tipo string elemento[,] o qualcuno mi suggerisce una struttura dati LEGGERA da utilizzare(sempre in c#) thanks
__________________
Se dovessi rinascere, farei l'idraulico! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Ciao.
ti consiglieri di creare una classe avente tutti gli attributi di ogni elemento, ovvero i 2 "nome e valore" Codice:
public class KeyValueClass
{
public string nome;
public int valore;
// piu' Costruttore
}
Codice:
List<KeyValueClass> KeyValueList=new List<KeyValueClass>(); ... KeyValueList.Add( new KeyValueClass(nome1, valore1) ); KeyValueList.Add( new KeyValueClass(nome2, valore2) );
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2003
Città: Ascoli Piceno
Messaggi: 5159
|
ciao
Grazie per la pronta(e utilissima! una volta creata questa struttura, per accedere ai dati utilizzo direttamente i metodi messi a disposizione da List, giusto? grazie per le dritte
__________________
Se dovessi rinascere, farei l'idraulico! |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Usare una Hash Map dove il nome della proprietà è la "key" e il valore della proprietà è il "value" può andare bene?
Quali svantaggi/vantaggi avrebbe questo tipo di soluzione rispetto alla lista tipizzata con classe definita dall'utente?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Dec 2003
Città: Ascoli Piceno
Messaggi: 5159
|
Quote:
aspetto anche io una risposta a questo punto
__________________
Se dovessi rinascere, farei l'idraulico! |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Certo, se i nomi non si ripetono probabilmente una Hash e' la migliore soluzione.
A meno che tu debba poi ordinare e mantenere qualche ordinamento. Per la hash la soluzione tipizzata in C# e' composta con i Dictionary Codice:
Dictionary<string,int> MyDict=new Dictionary<string,int>(); ... MyDict["pippo"]=5; MyDict["pluto"]=7;
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Dec 2003
Città: Ascoli Piceno
Messaggi: 5159
|
ecco, l'unico problema è che io dovrei poter accedere sequenzialmente alla struttura, prelevando tutti i valori uno alla volta.
un hash non mi permetterebbe la scansione sequenziale, corretto? oppure è possibile farla utilizzando che ne sò, un item.getNext ?
__________________
Se dovessi rinascere, farei l'idraulico! |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
in C# non so, non conosco il linguaggio, ma in Java se devi iterare un HashMap puoi farti restituire il Set di "key" e iterare su di quello, per esempio.
Resta sempre il problema dell'ordinamento.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Dec 2003
Città: Ascoli Piceno
Messaggi: 5159
|
Quote:
sto provando la prima soluzione: Codice:
List<KeyValueClass> KeyValueList=new List<KeyValueClass>(); ... KeyValueList.Add( new KeyValueClass(nome1, valore1) ); KeyValueList.Add( new KeyValueClass(nome2, valore2) );
__________________
Se dovessi rinascere, farei l'idraulico! |
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Con il dictionary non hai alcun problema per iterare sia sulle chiavi che sui valori:
Codice:
Dictionary<string, int> list = new Dictionary<string, int>();
foreach (string key in list.Keys)
{
Console.WriteLine("Key: {0} Value: {1}", key, list[key]);
}
__________________
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
esempio, in Java [HashMap, Set, Iterator] Codice:
HashMap nameAndValue = new HashMap();
// aggiungo le coppie di valori nell'HasMap
nameAndValue.put("nome1", value);
nameAndValue.put("nome2", value);
nameAndValue.put("nome3", value);
// ecc...
// itererazione
Iterator it = nameAndValue .entrySet().iterator();
while (it.hasNext())
{
Map.Entry entry = (Map.Entry) it.next();
String propertyName = (String) entry.getKey();
Value propertyValue = (Value) entry.getValue();
//... usa i valori come ti pare
}
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 11-06-2008 alle 12:32. |
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Dec 2003
Città: Ascoli Piceno
Messaggi: 5159
|
gia che ci sono ne approfitto allora..
dovrei effettuare adesso una operazione "strana". ho una classe cosi definita Codice:
public class Constants
{
public static readonly String ASSOC_CHILDREN = etc etc;
public static readonly String TYPE_CMOBJECT = etc etc
public static readonly String PROP_NAME = etc etc
}
in pratica dovrei controllare il valore di ogni stringa pubblica, e confrontarlo con il mio in ingresso.. ma come è possibile?la classe non mette a disposizione metodi per la ricerca e non posso nemmeno andarla a toccare in quanto parte di un progetto esterno ed esteso che non mi riguarda... soluzioni? grazie
__________________
Se dovessi rinascere, farei l'idraulico! |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Non ho capito *precisamente* cosa devi fare ma, se quello che ti interessa è leggere i valori delle costanti definite nella classe Constants, siccome sono dichiarate sia static sia public puoi accedere ad ognuna semplicemente tramite [nomeClasse].[nomeMembroPubblicoStatico] (sempre ammesso che in C# iol significato delle keyword "public" e "static" sia come in Java, in efetti ho visto il "readonly" che credo corrisponda al "final" di Java).
Supponiamo di over fare un confronto con una stringa particolare: Codice:
if (myString.equals(Constants.CONSTANTNAME))
{
// code here...
}
1) te conosci la classe e puoi chiamare direttamente nel codice ogni singola costante definita in Constats a mano; 2) usi la Reflection (immagino ci sia anche in C#, scusate l'ignoranza se così non fosse oppure se si chiama in un'altro modo).
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 11-06-2008 alle 18:34. |
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Dec 2003
Città: Ascoli Piceno
Messaggi: 5159
|
Quote:
il problema è che debbo iterare su ognuna di quelle, senza sapere il nome, per controllare che tra di esse ci sia una particolare stringa..è possibile?
__________________
Se dovessi rinascere, farei l'idraulico! |
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Codice:
2) usi la Reflection (immagino ci sia anche in C#, scusate l'ignoranza se così non fosse oppure se si chiama in un'altro modo).
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Si puo' usando la reflection.
Che normalmente viene messa in piedi se si e' alla frutta o per casi molto particolari. Solitamente si consiglia di ridisegnare l'applicazione. Di nuovo una hastable per queste costanti?
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. |
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Dec 2003
Città: Ascoli Piceno
Messaggi: 5159
|
Quote:
a questo punto dovrò provvedere con qualche metodo casalingo(facendo scegliere tramite costruttore solo le costanti, ed inserendo di volta in volta i valori) poi magari vi tengo aggiornati p.s. è il progetto per ingegneria del software 2 per i più curiosi, la mia è una parte di 5
__________________
Se dovessi rinascere, farei l'idraulico! |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:49.




















