过滤以从数组中排除元素
尝试过滤数组中的某些条目。 它不能保证它们在主数组中,因此我正在通过迭代进行测试。
total = ['alpha', 'bravo', 'charlie', 'delta', 'echo'] hide = ['charlie', 'echo'] pick = [] for i in total if !hide.include?(i) puts i pick.push(i) end end puts pick
这不起作用。 有没有更好的方法来提供这种filter?
Ruby允许您在两个数组上使用公共实例方法来获取它们的相交或独占元素:
a1 = ['alpha', 'bravo', 'charlie', 'delta', 'echo'] a2 = ['charlie', 'echo'] puts a1 - a2 => ['alpha', 'bravo', 'delta'] puts a1 & a2 => ['charlie', 'echo']
有关更多信息,请检查rubydoc数组 。 您可能会在那里找到您需要的确切内容。
你的代码适合我。 至于“更好的方法”,你可以使用Array#reject
:
total = ['alpha', 'bravo', 'charlie', 'delta', 'echo'] hide = ['charlie', 'echo'] pick = total.reject do |i| hide.include?(i) end puts pick
它不仅更具惯用性,而且for i in collection
循环中的Ruby for i in collection
collection.each { |i| }
collection.each { |i| }
。 带块的方法几乎总是更好的选择。
怎么样。 .select
? 或变异版.select!
?
这是文档 。
用法:
[0, 1, 2, 3].select { |x| x > 1 } # output: [2, 3]
或者在你的情况下:
execluded = [0, 1] [0, 1, 2, 3].select { |x| !execluded.include?(x) } # output: [2, 3]