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: 6402
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: 1344
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: 6402
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: 1344
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: 6402
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: 1344
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