ruby - 如何使用 block /lambda 表达式从 Ruby 数组中删除 n 个相同值的元素?

标签 ruby lambda

我正在学习 Ruby,并且正在尝试以 Ruby 的方式思考。然而,尽管我尽力了,我还是无法解决这个问题:

例如,我有以下源数组:

a = [1, 3, 5, 4, 5, 5, 7, 5]

# param 1 = number matching, param 2 times matching
b = a.remove_repeated(5, 3)

那么 b 的值为:

b = [1, 3, 4, 7, 5]

如果我只尝试匹配两个值,我也希望将它们全部删除。如:

a = [1, 4, 8, 4, 9, 2]
b = a.remove_repeated(4, 3)

那么 b 的值为:

a = [1, 8, 9, 2]

我知道如何以迭代和递归的方式执行此操作。相反,我正在寻找一种 Rubyesque 的方式来做到这一点。

最佳答案

class Array
  def remove_repeated(obj, limit)
    reject{|e| e == obj && (limit-=1) >= 0}
  end
end

Array.reject 一次复制数组一个元素, block 为 true 的元素除外。

关于ruby - 如何使用 block /lambda 表达式从 Ruby 数组中删除 n 个相同值的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5422749/

相关文章:

ruby - HTTParty 选项参数无法正常运行

ruby - Sinatra 路由 - 单独的文件

c# - 线程方法问题

c++ - 为什么我不能在 lambda 中捕获这个通过引用 ('&this' )?

lambda - 在运行时 lisp 中创建 lambda 函数

ruby - 为什么没有安装 Nokogiri?

css - rails/CSS : variable width text inputs

c# - lambda 表达式 foreach 循环

c# - 通过将另一个属性与不同列表进行比较来从源列表中选择 ID

ruby-on-rails - 使用 Capybara 发送表单时会添加换行符