Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Aggiungere un campo a una Array
Forum - C# / VB.NET - Aggiungere un campo a una Array

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
fosforo (Normal User)
Expert


Messaggi: 391
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 8:53
Giovedì, 17/05/2018
Ciao
Ho creato un'array con 3 campi:

PersonalData[X] = new string[] { (Name),(Cognome),(Indirizzo)};

Non riesco ad inserire a fine Array un altro capo.
Ho trovato delle procedure ma, o sovrascrivo o inserisco all'inizio.


Help me

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 9:27
Giovedì, 17/05/2018
Un altro campo ... in che senso? Parli di campi di un DB o di un semplice dato di una variabile?

Come è fatto PersonalData? Perché PersonalData[X]?

Name Cognome Indirizzo sono stringhe? Perché tra parentesi?


P.S. Perché Name e non Nome?


Ultima modifica effettuata da nessuno il 17/05/2018 alle 9:43


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
fosforo (Normal User)
Expert


Messaggi: 391
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 9:52
Giovedì, 17/05/2018
Hai ragione, le parentesi le avevo messe per far capire che sono i dati che inserisco nell'Array e il PersonalData è il nome dell'Array, ma lo cambio subito x non creare confusione.

Tutti i campi sono stringhe:

MioArray[X] = new string[] {Name, Cognome, Indirizzo};

Vorrei aggiungere, dopo il campo Indirizzo, il campo città, e ottenere questo array:

MioArray[X] = new string[] {Name, Cognome, Indirizzo, città};

PM Quote
Avatar
Ultimo (Member)
Guru


Messaggi: 877
Iscritto: 22/05/2010

Segnala al moderatore
Postato alle 10:57
Giovedì, 17/05/2018
Testo quotato

Postato originariamente da fosforo:

Hai ragione, le parentesi le avevo messe per far capire che sono i dati che inserisco nell'Array e il PersonalData è il nome dell'Array, ma lo cambio subito x non creare confusione.

Tutti i campi sono stringhe:

MioArray[X] = new string[] {Name, Cognome, Indirizzo};

Vorrei aggiungere, dopo il campo Indirizzo, il campo città, e ottenere questo array:

MioArray[X] = new string[] {Name, Cognome, Indirizzo, città};



si suppone che la "X" sia una variabile numerica

se tu dichiari l'Array con tre valori iniziali, poi non puoi aggiungerne altri

lo devi dichiarare con 4 elementi "MioArray[] = new string[] {Name, Cognome, Indirizzo, città};"



If ok Then GOTO Avanza else GOTO Inizia

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1316
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 16:09
Giovedì, 17/05/2018
Giusto quello che dice Ultimo, meglio dichiarare la matrice con il numero di elementi occorrenti.
Nei casi dove non si conosce a priori la dimensione della matrice, si può ridimensionare da codice:

Codice sorgente - presumibilmente C#

  1. private void Form1_Load(object sender, EventArgs e)
  2.         {
  3.            
  4.             // array principale di lavoro
  5.             // se ometti il numero di elementi X
  6.             // la matrice si autodimensiona in base ai parametri inseriti
  7.  
  8.             String[] PrimoArray = new string[] {"Carlo", "Rossi", "Roma" };
  9.  
  10.             // mi serve un elemento in più
  11.             // creo un nuovo array con un elemento in più
  12.  
  13.             String[] SecondoArray = new string[PrimoArray.GetUpperBound(0) + 2];
  14.            
  15.             // per preservare i vecchi dati copio la prima matrice sulla nuova
  16.  
  17.             Array.Copy(PrimoArray, SecondoArray, PrimoArray.Length);
  18.  
  19.             // sovrascrivo l'array principale di lavoro con l'array appena creato
  20.  
  21.             PrimoArray = SecondoArray;
  22.  
  23.             // PrimoArray ora contiene gli stessi valori di prima ma ha un elemento in più di valore Null
  24.             // che posso riempire
  25.  
  26.             PrimoArray[3] = "Via Carmine";
  27.         }


Ho usato delle stringhe ma tutto funziona anche usado delle variabili di stringa

In VB .Net esistono le istruzioni Redim e Redim Preserve.
Non sono esperto di C#, se qualche Guru conosce un sistema migliore del mio è gradito un esempio.
Mi piacerebbe usare anche Array.Resize ma gli esempi che ho trovato in giro non funzionano.

Ultima modifica effettuata da Carlo il 17/05/2018 alle 17:28


in programmazione tutto è permesso
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:06
Giovedì, 17/05/2018
Redim (Preserve) è uno statement inefficiente e obsoleto, che proviene dal VB precedente e che funziona solo grazie al riferimento allo spazio dei nomi Microsoft.VisualBasic (che dovrebbe essere eliminato da tutti i progetti VB.NET per evitare l'uso di statement/funzioni obsolete).

Sia in VB.NET che in C#, per un array a una sola dimensione, si usa la classe Array
https://msdn.microsoft.com/it-it/library/system.array(v=vs. ...
e si scrive qualcosa del genere

Codice sorgente - presumibilmente C# / VB.NET

  1. Dim arr As String() = {"Carlo", "Rossi", "Roma"}
  2.  
  3.         System.Array.Resize(arr, arr.Length + 1)
  4.         arr(3) = "Firenze"
  5.  
  6.         Console.WriteLine(arr(3))




Codice sorgente - presumibilmente C# / VB.NET

  1. string[] arr = new string[] { "Carlo", "Rossi", "Roma" };
  2.  
  3.             System.Array.Resize(ref arr, arr.Length + 1);
  4.             arr[3] = "Firenze";
  5.  
  6.             Console.WriteLine(arr[3]);



In realtà, con .NET è preferibile usare un ArrayList o un Generics

Ultima modifica effettuata da nessuno il 17/05/2018 alle 17:07


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1316
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 17:48
Giovedì, 17/05/2018
Testo quotato

Postato originariamente da nessuno:

Redim (Preserve) è uno statement inefficiente e obsoleto, che proviene dal VB precedente e che funziona solo grazie al riferimento allo spazio dei nomi Microsoft.VisualBasic (che dovrebbe essere eliminato da tutti i progetti VB.NET per evitare l'uso di statement/funzioni obsolete).

Sia in VB.NET che in C#, per un array a una sola dimensione, si usa la classe Array
https://msdn.microsoft.com/it-it/library/system.array(v=vs. ...
e si scrive qualcosa del genere

Codice sorgente - presumibilmente C# / VB.NET

  1. Dim arr As String() = {"Carlo", "Rossi", "Roma"}
  2.  
  3.         System.Array.Resize(arr, arr.Length + 1)
  4.         arr(3) = "Firenze"
  5.  
  6.         Console.WriteLine(arr(3))




Codice sorgente - presumibilmente C# / VB.NET

  1. string[] arr = new string[] { "Carlo", "Rossi", "Roma" };
  2.  
  3.             System.Array.Resize(ref arr, arr.Length + 1);
  4.             arr[3] = "Firenze";
  5.  
  6.             Console.WriteLine(arr[3]);



In realtà, con .NET è preferibile usare un ArrayList o un Generics



In VB .Net Array.Resize mi funzionava alla grande, ma in C# no e ora grazie a nessuno so anche il perché.
In: https://msdn.microsoft.com/it-it/library/bb348051(v=vs.110) ...
il "ref" non c'è, invece è indispensabile, dagli aiuti lo avevo notato, e avevo provato varie combinazioni, tutte sbagliate!!

Ho adottato il mio motto "in programmazione tutto è permesso", scrivendo il codice che ho postato prima, ora inutile.:k:

EDIT: il mio codice funziona anche con le matrici multidimensionali, invece come si dovrebbe fare?

Ultima modifica effettuata da Carlo il 17/05/2018 alle 18:01


in programmazione tutto è permesso
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 17:58
Giovedì, 17/05/2018
Leggi bene gli esempi dal link.... trovi tutto


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1316
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 18:18
Giovedì, 17/05/2018
Ok, ci guardo meglio...

@nessuno

Nel programma conversione misure, ho permesso all'utente di inserire nuove unità di misura e nuove scale, per fare questo ho dovuto ridimensionare le tre matrici bidimensionali, che contengono tutti i parametri.

Ho fatto così:
Codice sorgente - presumibilmente C# / VB.NET

  1. String[,] ArrayScala = new String[,] {{"Kelvin", "Celsius", "Fahrenheit", "Rankine", "Delisle", "Réaumur", "Newton", "Rømer"},
  2.                                               {"Braccia", "Miglia", "Yarde", "Kilometri", "Metri", "Pollici", "Piedi", "Miglia Nautiche"},
  3.                                               {"Galloni Usa", "Litri", "Galloni Uk", "Ettolitri", "Pinte USA", "Quarti USA", "Pinte UK", "Quarti UK"},
  4.                                               {"Pascal", "Bar", "Torr", "Millimetri H2O", "Atmosfere", "Kg forza", "Atmosfere tec", "Barye"},
  5.                                               {"Kilogrammi", "Stone", "Libbre", "Once", "Grani", "Carati", "Tonnellate", "Grammi"},
  6.                                               {"Joule", "Kcalorie", "Wattora", "Kwattora", "Elettronvolt", "Uk Thermal u", "Us Thermal u", "Piedi x libbra"}};
  7.                
  8.                 int Elementi0 = ArrayScala.GetUpperBound(0) + 1; // ridimensiono a sinistra
  9.                 int Elementi1 = ArrayScala.GetUpperBound(1); // non ridimensiono, le scale restano sempre 8
  10.  
  11.                 // Ridimensiono ArrayScala
  12.                 // Prima creo una matrice con le nuove dimensioni
  13.                 string[,] tempVar = new string[Elementi0 + 1, Elementi1 + 1];
  14.                 Array.Copy(ArrayScala, tempVar, ArrayScala.Length);
  15.                 ArrayScala = tempVar;
  16.  
  17.                 // una dimensione in +, otto elementi in +
  18.                 // riempimento con stringhe fittizie
  19.  
  20.                for (int i = 0; i < Elementi1 + 1; i++)
  21.                 {
  22.                     ArrayScala[6, i] = "Scala " + i.ToString();
  23.                 }


Come avrei dovuto fare?

Testo quotato

nessuno
Leggi bene gli esempi dal link.... trovi tutto



Ho riletto meglio, c'è scritto, ma si capisce solo dopo che lo sai...:)
Ho letto anche del ridimensionamento di matrici multidimensionali, con il ciclo di for, sinceramente mi piace di più come ho fatto io.:asd:

Ultima modifica effettuata da Carlo il 17/05/2018 alle 18:42


in programmazione tutto è permesso
PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo