arrays - Ruby,Array.select 与元素的数量

标签 arrays ruby

我有这个数组

[1, 2, 3, 4, 5, 6]

我想获取前 2 个大于 3 的元素。

我能做到:

elements = []

[1, 2, 3, 4, 5, 6].each do |element|
  elements << element if element > 3
  break if elements.size == 2
end

puts elements

有没有更优雅的方法来做到这一点?

Ruby 核心中是否有类似Array.select(num_elements, &block) 的东西?

最佳答案

你快到了。只需使用带参数的 break 即可:

[1, 2, 3, 4, 5, 6].each_with_object([]) do |element, acc|
  acc << element if element > 3
  break acc if acc.size >= 2
end

实现它的另一种方法是使用 Enumerator::Lazy使用 array.lazy.select,或使用 Enumerable#take 的显式 Enumerator 实例(这里绝对是矫枉过正,发布主要用于教育目的。 )

enum =
  Enumerator.new do |y|
    i = [1, 2, 3, 4, 5, 6].each
    loop { i.next.tap { |e| y << e if e > 3 } }
  end
enum.take(2)
#⇒ [4, 5]

旁注:一旦找到两个元素,上述两个示例都会停止遍历输入。

关于arrays - Ruby,Array.select 与元素的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56209958/

相关文章:

arrays - 通过 numpy 从另一个列表中的向量中减去列表中的每个向量

java - 在java中对未知维数数组的第一列进行排序

ruby-on-rails - Controller 设置局部变量而不是调用 setter

arrays - JSON 的 Postgres 数组避免强制转换

java - 如何让我的程序(彩票游戏)再次检查提示?

javascript - 使用 native Javascript 按数据类型对数组进行排序

ruby - 我想向 Ruby 对象添加带有闭包的单例方法

ruby - OptParse 中带有 2 个参数的选项

ruby-on-rails - 选择动态数组的下拉列表

ruby - 为什么我会收到 Zlib::DataError?