返回具有重复元素的数组,对于重复元素ruby,最多只返回N次

时间:2016-11-20 23:55:21

标签: arrays ruby

如何返回包含来自给定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次。

1 个答案:

答案 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没有密钥eh[e] #=> nil,那么上面的表达式会缩小为

h[e] = 0 + 1
  #=> 1