2010-02-18 27 views
13

在Ruby中,你可以使用地图/收集方法的阵列上进行修改:C#阵图/收集

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

有一个简单的方法在C#这样做吗?

回答

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

完美!感谢您及时的回复! – RyanScottLewis 2010-02-18 00:36:25

+3

请注意,这会创建一个新数组,并且不会修改原始数组,如OP问题中所述。 – spender 2010-02-18 00:37:00

+1

@spender:非常真实。 'a ='在开始时只负责将这个特定的参考点指向新的数组,如果还有对原始数组的其他引用,它们将不会被更新。 – Tanzelax 2010-02-18 00:44:24

1

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

是的,使用LINQ(但这不会修改原来的集合)更直观。

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

我更喜欢使用ConvertAll,因为它的速度更快,我相信你可以试试这个

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

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

是什么让这更快或更直观? – 2012-05-11 15:42:51

+0

它更快,因为您不必在此期间创建延迟加载的枚举。 IMO更具可读性,因为它确切地说明了它的功能。地图是大多数其他语言使用的地图。 – mythz 2012-05-11 18:26:12

+0

那么不会'Map'更直观? – 2012-10-15 18:51:28