为了实现Python列表理解的等价物,我执行以下操作:
some_array.select{|x| x % 2 == 0 }.collect{|x| x * 3}
有没有更好的方法用一个方法调用来做this...perhaps?
发布于 2008-11-21 22:47:16
如果你真的想要,你可以像这样创建一个Array#comprehend方法:
class Array
def comprehend(&block)
return self if block.nil?
self.collect(&block).compact
end
end
some_array = [1, 2, 3, 4, 5, 6]
new_array = some_array.comprehend {|x| x * 3 if x % 2 == 0}
puts new_array
打印:
6
12
18
不过,我可能会像你那样做。
发布于 2008-11-22 01:40:00
怎么样:
some_array.map {|x| x % 2 == 0 ? x * 3 : nil}.compact
稍微更干净,至少对我来说是这样,根据一个快速的基准测试,比你的版本快了15%……
发布于 2012-03-27 07:26:47
在这个线程中,Ruby程序员似乎对什么是列表理解有一些困惑。每一个响应都假设要转换一些预先存在的数组。但是列表理解的强大之处在于使用以下语法动态创建的数组:
squares = [x**2 for x in range(10)]
下面是Ruby中的一个类比(在这个主题中,AFAIC是唯一合适的答案):
a = Array.new(4).map{rand(2**49..2**50)}
在上面的例子中,我创建了一个随机整数数组,但是这个块可以包含任何东西。但这将是一个Ruby列表的理解。
https://stackoverflow.com/questions/310426
复制相似问题