ruby array中找出重复元素

#上文的inject现在用上了module Enumerable  def dups    inject({}) {|h,v| h[v]=h[v].to_i+1; h}.reject{|k,v| v==1}.keys  endend
arr = %w{foo bar baz bar baz qux foo zub}puts arr.dups.inspect# => ["baz", "foo", "bar"]
#替换一inject(Hash.new(0)) {|h,v| h[v] += 1; h}.reject{|k,v| v==1}.keys

这个是比较好理解的

class Array  def only_duplicates    duplicates = []    self.each {|each| duplicates << each if self.count(each) > 1}    duplicates.uniq  endend
puts [1,2,2,4,5,1].only_duplicates.inspect==> [1, 2]
require 'benchmark' module Enumerable   def map_with_index      index = -1      (block_given? && self.class == Range || self.class == Array)  ?  map { |x| index += 1; yield(x, index) }  :  self   endendclass Array   def find_dups      inject(Hash.new(0)) { |h,e| h[e] += 1; h }.select { |k,v| v > 1 }.collect { |x| x.first }   end   def find_dups2      uniq.select{ |e| (self-[e]).size < self.size - 1 }   end   def find_ndups     # also returns the number of items      uniq.map { |v| diff = (self.size - (self-[v]).size); (diff > 1) ? [v, diff] : nil}.compact   end   # cf. http://www.ruby-forum.com/topic/122008   def dups_indices         (0...self.size).to_a - self.uniq.map{ |x| index(x) }   end   def dup_indices(obj)      i = -1      ret = map { |x| i += 1; x == obj ? i : nil }.compact      #ret = map_with_index { |x,i| x == obj ? i : nil }.compact      ret.shift      ret   end   def delete_dups(obj)      indices = dup_indices(obj)      return self if indices.empty?      indices.reverse.each { |i| self.delete_at(i) }      self   endend  array = [1,3,5,5,6,7,9,10,14,18,22,22,4,4,4,3,6]dups = nilBenchmark.bm(14) do |t|  t.report('find_dups:') do    dups = array.find_dups end end p dups   #=> [5, 22, 6, 3, 4]p %w(a b a c c d).dups_indicesp %w(a b a c c d).dup_indices('c')p %w(a b a c c d).delete_dups('a')
class Array  def find_dups    uniq.map {|v| (self - [v]).size < (self.size - 1) ? v : nil}.compact  endend
 def mostused(ahash)    original_size = ahash.size    sizes = {}       ahash.uniq.map { |x| sizes[x] = original_size - ((ahash - [x]).size)}    sizes.sort_by {|k,v| v}.pop        end

愚者用肉体监视心灵,智者用心灵监视肉体

ruby array中找出重复元素

相关文章:

你感兴趣的文章:

标签云: