在Ruby中,最富表现力的方法是什么,可以将一个数组映射为某些元素被修改而其他元素不变?
这是一种直接的做法:
这是一种直接的做法:
old_a = ["a", "b", "c"] # ["a", "b", "c"]
new_a = old_a.map { |x| (x=="b" ? x+"!" : x) } # ["a", "b!", "c"]
当然,如果不足够的话,忽略“leave-alone”情况:new_a = old_a.map { |x| x+"!" if x=="b" } # [nil, "b!", nil]
我想要的是像这样的东西:
new_a = old_a.map_modifying_only_elements_where (Proc.new {|x| x == "b"})
do |y|
y + "!"
end
# ["a", "b!", "c"]
有没有一种好的方式可以在Ruby中实现这个功能(或者Rails有某种方便的方法我还没有发现)?
感谢大家的回复。虽然你们共同说服我最好只是使用带有三元运算符的map
,但你们中的一些人发布了非常有趣的答案!
filter_map
,更多信息请参见此处。 - SRack