`

ruby array中找出重复元素

阅读更多
#上文的inject现在用上了
module Enumerable
  def dups
    inject({}) {|h,v| h[v]=h[v].to_i+1; h}.reject{|k,v| v==1}.keys
  end
end


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
  end
end



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
   end
end


class 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
   end

end  


array = [1,3,5,5,6,7,9,10,14,18,22,22,4,4,4,3,6]

dups = nil


Benchmark.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_indices
p %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
  end

end


 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
分享到:
评论
1 楼 陈金山 2012-10-30  
>> a = [1,1,2,2,3,3,4]
[1, 1, 2, 2, 3, 3, 4]
>> b = a & a
[1, 2, 3, 4]

相关推荐

    ruby 标准库

    在Ruby的标准库中,`Array`类提供了丰富的实例方法和类方法来处理数组。 ##### 1.1 Class methods **1.1.1 []** 用于创建一个新的数组。例如: ```ruby arr = [1, 2, 3] ``` **1.1.2 new** 创建一个新数组。...

    Ruby的语法和语言特性总结

    散列表在Ruby中广泛用于数据存储和查找。 总的来说,Ruby的语法和语言特性使其成为一个灵活、易于阅读和编写代码的编程语言。它的面向对象特性、动态类型和鸭子类型让开发者能够快速开发出可维护的代码,而丰富的...

    ruby_data_structures:Ruby中的数据结构和算法实践

    Ruby数组支持多种操作,如添加元素(`push`、`unshift`)、删除元素(`pop`、`shift`)、查找元素(`index`)以及合并(`concat`)等。 二、哈希(Hash) 哈希是一种键值对的集合,它允许通过唯一的键来访问和存储...

    data-structures-ruby:Ruby中的数据结构

    在Ruby编程语言中,数据结构是组织、存储和处理数据的核心工具。它们是程序设计的基础,帮助我们有效地管理和操作数据。本项目“data-structures-ruby”专注于Ruby中的各种数据结构,通过创建一个gem来实现并展示...

    DataStructures:Ruby 中的数据结构和算法

    6. 图遍历算法:如深度优先搜索(DFS)和广度优先搜索(BFS),在处理图结构问题时非常有用,例如找出两个节点之间的最短路径。 7. 字符串处理算法:如KMP(Knuth-Morris-Pratt)算法用于模式匹配,Rabin-Karp或...

    Algorithms-and-Data-Structures-in-Ruby:只是为了教育

    5. **队列(Queue)**:先进先出(FIFO)的数据结构,Ruby中可以使用Array或Dequeue实现。 6. **集合(Set)**:不重复元素的集合,Ruby有内建的Set类提供集合操作。 7. **树(Tree)**:分层数据结构,如二叉树、...

    ruby 数组使用教程

    在Ruby编程语言中,数组(Array)是一种非常重要的数据结构,它允许你存储多个值在一个单一的变量中。数组中的每个元素都有一个唯一的索引,根据这个索引,你可以轻松地访问、修改或删除这些元素。下面我们将深入...

    Ruby实现插入排序算法及进阶的二路插入排序代码示例

    在给出的基础插入排序示例中提到,如果数组中存在非整数类型的元素,可能会导致类型不匹配的问题。例如,尝试比较数字和`nil`会导致`ArgumentError`。这是因为Ruby允许数组包含不同类型的数据,因此在进行比较之前...

    数据结构项目

    Ruby中的数组可以用`Array`类创建,支持多种操作,如添加、删除、查找和排序。 2. **链表**:链表不连续存储元素,每个节点包含数据和指向下一个节点的指针。Ruby中虽然没有内置链表结构,但可以通过对象和引用实现...

    CodingInterviewProblems:在编码面试之前要解决的一堆问题

    通过运行以下命令运行ruby测试: ruby test/&lt;nameofproblem&gt;.rb 例如: ruby test/valid_anagram_test.rb 这是在此项目中发现的问题的列表: 向右旋转数组(array_rotation.rb) 查找第一个非重复字符(first_...

    史上最全开发速查表

    - **XPath**:在 XML 文档中查找信息的语言。 - **XSLT**:XML 转换语言,用于转换 XML 文档。 以上技术涵盖了从前端到后端开发的各种需求,通过这些知识点的学习和掌握,可以有效地提高开发效率和代码质量。

    challenge_game:二维地图搜索的小案例研究

    DFS常用于找出所有可能的路径,而BFS则适用于找到最短路径,因为它总是先探索距离起点最近的节点。在Ruby中,我们可以使用递归或栈(对于DFS)以及队列(对于BFS)来实现这些算法。 例如,BFS的基本步骤是: 1. ...

    CodeIgniter:php敏捷开发框架web快速开发详解

    这意谓你必须仔细地去查找并修改代码中的每一处 URL,否则它们将无法正常工作。 CI 给你一个简单的函数,可以这样编写超链接: 复制代码到剪贴板PHP 代码echo anchor('start/hello/fred', 'Say hello to Fred');CI...

    Java进阶路线

    - **倒排索引**:一种高效的数据结构,用于快速查找文档集合中包含特定关键词的所有文档。 - **Lucene, ElasticSearch, Solr, ELK**:流行的企业级搜索解决方案。 - **准确性, 召回率, 实时性**:评估搜索质量的关键...

Global site tag (gtag.js) - Google Analytics