2010-02-18 6 views
13

En Rubí se puede utilizar el mapa/recoger método sobre una matriz para modificarlo:C# matriz Mapa/Recoge

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

¿Hay una manera simple de hacer esto en C#?

Respuesta

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

Perfecto! ¡Gracias por la rápida respuesta! – RyanScottLewis

+3

tenga en cuenta que esto crea una nueva matriz y no modifica la matriz original, como se pide en la pregunta de OP. – spender

+1

@spender: muy cierto. 'a =' al principio solo se ocupa de hacer de este punto de referencia particular la nueva matriz; si hay otras referencias a la matriz original, no se actualizarán. – Tanzelax

1

puede probar este

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

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

Sí, usando LINQ (pero esto no va a modificar la colección original)

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

Yo prefiero usar ConvertAll ya que es más rápido y creo más intuitivo.

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

¿Qué hace que esto sea más rápido o más intuitivo? –

+0

Es más rápido porque, en el ínterin, no es necesario crear un enumerable con carga diferida. IMO es más legible porque dice exactamente lo que hace. El mapa es lo que usan la mayoría de los otros langs. – mythz

+0

Entonces, ¿'Mapa' no sería más intuitivo? –