2010-02-18 9 views
13

In Ruby è possibile utilizzare la mappa/raccogliere metodo su un array per modificarlo:C# Array Mappa/Raccogliere

a = [ "a", "b", "c", "d" ] 
a.collect! {|x| x + "!" } 
a       #=> [ "a!", "b!", "c!", "d!" ] 

C'è un modo semplice per fare questo in C#?

risposta

25
a = a.Select(s => s + "!").ToArray(); 
+0

Perfetto! Grazie per la risposta rapida! – RyanScottLewis

+3

essere consapevoli del fatto che questo crea un nuovo array e non modifica l'array originale, come richiesto nella domanda dell'OP. – spender

+1

@spender: molto vero. 'a =' all'inizio si occupa solo di rendere questo particolare punto di riferimento al nuovo array, se ci sono altri riferimenti all'array originale, non verranno aggiornati. – Tanzelax

1

si può provare questo

var a = new[] { "a", "b", "c", "d" }; 

a = a.Select(p => p + "!").ToArray(); 
0

Yup, utilizzando Linq (ma questo non modificherà il collezione originale)

var a=new[]{"a","b","c","d"}; 
a.Select(x=>x+"!"); 
4

Io preferisco usare ConvertAll dal momento che è più veloce e credo più intuitivo.

var a = a.ConvertAll(x => x + "!").ToArray(); 
+0

Che cosa rende questo più veloce o più intuitivo? –

+0

È più veloce perché non è necessario creare un enumerable lazy-loaded nel frattempo. IMO è più leggibile perché dice esattamente quello che fa. La mappa è ciò che la maggior parte degli altri lang usa. – mythz

+0

Quindi, non sarebbe 'Map' essere più intuitivo? –