如何返回包含来自给定array
的重复元素的数组,其中包含每个重复元素数量max_elements
次,而无需重新排序。
def delete_nth_elements(array,max_elements)
#your code here
end
delete_nth_elements([1,2,3,4,1,2,3,5,1,2,3,6],2) # return [1,2,3,4,1,2,3,5,6]
并删除下一个[1,2,3],因为这会导致1 2和3在结果中3次。
答案 0 :(得分:3)
def delete_nth_elements(arr, max_elements)
h = Hash.new(0)
arr.select { |e| (h[e] += 1) <= max_elements}
end
delete_nth_elements([1,2,3,4,1,2,3,5,1,2,3,6],2)
#=> [1,2,3,4,1,2,3,5,6]
h
通常称为计算哈希。请参阅Hash::new,特别是参考默认值(此处为0
)。可以写一个
def delete_nth_elements(arr, max_elements)
h = {}
arr.select { |e| (h[e] ||= 0) += 1) <= max_elements}
end
h[e] ||= 0) += 1
扩展为
(h[e] = h[e] || 0) += 1
如果h
没有密钥e
,h[e] #=> nil
,那么上面的表达式会缩小为
h[e] = 0 + 1
#=> 1