2010-02-18 22 views
13

W Ruby można korzystać z mapy/zbierać metodę na tablicy, aby go zmodyfikować:C# Array Mapa/Zbierz

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

Czy istnieje prosty sposób to zrobić w C#?

Odpowiedz

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

Idealnie! Dziękuję za szybką odpowiedź! – RyanScottLewis

+3

należy pamiętać, że tworzy to nową tablicę i nie modyfikuje oryginalnej tablicy, jak pytano w pytaniu OP. – spender

+1

@spender: Bardzo prawdziwe. "a =" na początku tylko zajmuje się tym konkretnym punktem odniesienia do nowej tablicy, jeśli istnieją inne odniesienia do oryginalnej tablicy, nie będą one aktualizowane. – Tanzelax

1

można spróbować tego

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

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

Tak, przy użyciu LINQ (ale nie będą modyfikować oryginalnej kolekcji)

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

Wolę używając convertall ponieważ jest to szybsze i wierzę bardziej intuicyjny.

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

Co sprawia, że ​​jest to szybsze lub bardziej intuicyjne? –

+0

Jest to szybsze, ponieważ w międzyczasie nie trzeba tworzyć leniwego wyliczenia. IMO jest bardziej czytelny, ponieważ mówi dokładnie, co robi. Mapa jest tym, czego używa większość innych języków. – mythz

+0

Czy zatem "mapa" nie byłaby bardziej intuicyjna? –