2015-01-15 15 views
17

Ho un array:Come rimuovere il primo elemento in un array?

arr[0]="a" 
arr[1]="b" 
arr[2]="a" 

voglio rimuovere solo arr[0], e mantenerearr[1] e arr[2].
stavo usando:

arr= arr.Where(w => w != arr[0]).ToArray(); 

Dal arr[0] e arr[2] hanno lo stesso valore ("a"), il risultato mi sto solo arr[1].

Come posso restituire sia arr[1] e arr[2] e rimuovere solo arr[0]?

+1

questo è solo uno dei tanti motivi per cui una lista sarebbe una scelta migliore – Plutonix

+0

Si potrebbe avere utilizzato un sovraccarico diverso che fornisce un indice: '.Where ((w, i) => i> 0)' but ' .Skip (1) 'eliminerebbe la necessità di preoccuparsi anche del tuo condizionale. – spender

risposta

56

si può facilmente farlo utilizzando Skip:

arr = arr.Skip(1).ToArray(); 

Questo crea un altro array con nuovi elementi, come in altre risposte. È perché non puoi rimuovere o aggiungere elementi a un array. Gli array hanno una dimensione fissa.

+0

Sì. Molto semplice. – spender

8

Si potrebbe provare questo:

arr = arr.ToList().RemoveAt(0).ToArray(); 

Facciamo un elenco basato sulla matrice che già abbiamo, togliamo l'elemento in posizione 0 e gettato il risultato in un array.

o questo:

arr = arr.Where((item, index)=>index!=0).ToArray(); 

dove si usa la versione di overload di Where, che prende come argomento anche l'indice della voce. Si prega di dare un'occhiata here.

Aggiornamento

Un altro modo, che è più elegante rispetto al precedente, come D Stanley sottolineato, è quello di utilizzare il metodo Skip:

arr = arr.Skip(1).ToArray(); 
+1

La prima soluzione non funziona come 'RemoveAt (0)' è una procedura e non restituisce un elenco in modo da poter chiamare 'ToArray()' su ... –

1

Uso secondo sovraccarico Enumerable.Where: -

arr = arr.Where((v,i) => i != 0).ToArray(); 
1

Informazioni:

if (arr.Length > 0) 
{ 
    arr = arr.ToList().RemoveAt(0).ToArray(); 
} 
return arr; 
Problemi correlati