首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Ruby中的列表理解

Ruby中的列表理解
EN

Stack Overflow用户
提问于 2008-11-21 22:27:45
回答 15查看 52.6K关注 0票数 99

为了实现Python列表理解的等价物,我执行以下操作:

代码语言:javascript
复制
some_array.select{|x| x % 2 == 0 }.collect{|x| x * 3}

有没有更好的方法用一个方法调用来做this...perhaps?

EN

回答 15

Stack Overflow用户

回答已采纳

发布于 2008-11-21 22:47:16

如果你真的想要,你可以像这样创建一个Array#comprehend方法:

代码语言:javascript
复制
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

打印:

代码语言:javascript
复制
6
12
18

不过,我可能会像你那样做。

票数 56
EN

Stack Overflow用户

发布于 2008-11-22 01:40:00

怎么样:

代码语言:javascript
复制
some_array.map {|x| x % 2 == 0 ? x * 3 : nil}.compact

稍微更干净,至少对我来说是这样,根据一个快速的基准测试,比你的版本快了15%……

票数 94
EN

Stack Overflow用户

发布于 2012-03-27 07:26:47

在这个线程中,Ruby程序员似乎对什么是列表理解有一些困惑。每一个响应都假设要转换一些预先存在的数组。但是列表理解的强大之处在于使用以下语法动态创建的数组:

代码语言:javascript
复制
squares = [x**2 for x in range(10)]

下面是Ruby中的一个类比(在这个主题中,AFAIC是唯一合适的答案):

代码语言:javascript
复制
a = Array.new(4).map{rand(2**49..2**50)} 

在上面的例子中,我创建了一个随机整数数组,但是这个块可以包含任何东西。但这将是一个Ruby列表的理解。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/310426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档