2010-04-20 45 views
6

Ho una variabile globale int[] e voglio cancellare i suoi dati e riempirla di nuovo in un ciclo.Come cancellare una matrice

Come è possibile questo in C#?

+5

Come si può avere una variabile globale in C#? –

+0

@rep_movsd che è un'altra domanda;) lol –

+0

Il numero di elementi cambia in ogni iterazione del ciclo? Sarebbe bello vedere un po 'di codice. –

risposta

9

Non sarebbe più semplice utilizzare una lista.

public List<int> something = new List<int>(); 

E poi:

something.Add(somevalue); 

e per azzerare:

something.Clear(); 
+0

Odio int []. Adoro la lista . +1 –

+11

-1: Non hai idea che sarebbe più facile usare una lista! La domanda riguarda gli array. – Adrian

+0

@Adrian: È possibile che l'OP non abbia familiarità con Elenco <>. Sarebbe bello poter suggerire alternative migliori. Non c'è niente di sbagliato in questo. +1 per questa risposta. – Nayan

0
int[] x 
    int[] array_of_new_values 

    for(int i = 0 ; i < x.Length && i < array_of_new_values.Length ;i++) 
    { 
     x[i] = array_of_new_values[i]; // this will give x[i] its new value 
    } 

Perché azzerarlo? Assegna solo nuovi valori.

+0

Sono in grado di vedere molti motivi per cui si desidera un array zero -d pulito, ad esempio il debug, vedere che i dati nell'array sarebbero molto più facili da monitorare rispetto alla sovrascrittura dei dati. – Adrian

+1

Io cambio alcuni valori e l'altro deve essere "0". Posso farlo in questo modo ma cercavo 1 codice di linea. – LIX

4

Questo non è risposta corretta per il tuo post, ma è possibile utilizzare questa logica in base alle proprie necessità. Qui è un codice Frammenti tratti da here

using System; 

class ArrayClear 
{ 

    public static void Main() 
    { 
     int[] integers = { 1, 2, 3, 4, 5 }; 
     DumpArray ("Before: ", integers); 
     Array.Clear (integers, 1, 3); 
     DumpArray ("After: ", integers); 
    } 

    public static void DumpArray (string title, int[] a) 
    { 
     Console.Write (title); 
     for (int i = 0; i < a.Length; i++) 
     { 
     Console.Write("[{0}]: {1, -5}", i, a[i]); 
     } 
     Console.WriteLine(); 
    } 
} 

e l'uscita di questo è:

Before: [0]: 1 [1]: 2 [2]: 3 [3]: 4 [4]: 5 
After: [0]: 1 [1]: 0 [2]: 0 [3]: 0 [4]: 5 
19

Il Array.Clear() metodo "statico imposta una serie di elementi della matrice a zero, false, o Nulla, a seconda del tipo di elemento ". Se si desidera cancellare l'intero array, è possibile utilizzare questo metodo di fornire 0 come indice di partenza e myArray.Length come lunghezza:

Array.Clear(myArray, 0, myArray.Length); 
+0

Questo metodo non cancella la matrice letteralmente, ma imposta semplicemente 0/false/null per ogni elemento nella matrice. –

+0

@ 1_bug Che altro potrebbe significare "cancellare"? – Nyerguds

1

Perché non solo creare nuovi array e assegnarlo alla variabile di matrice esistente?

x = new int[x.length]; 
+0

Perché ciò significa che il garbage collector ha un lavoro extra che ripulisce tutto ciò che si lascia in memoria. – Nyerguds

0

Per due array bidimensionali, si dovrebbe fare come muggito:

Array.Clear(myArray, 0, myArray.GetLength(0)*myArray.GetLength(1));