我正在学习 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/