比较Ruby中数组的最有效方法

scrub_lord

以下代码用于查找arr_1中缺少的数字arr_2

def compare_1 (arr_1, arr_2)
    output = []

    temp = arr_2.each_with_object(Hash.new(0)) { |val, hsh| hsh[val] = 0 }

    arr_1.each do |element|
        if !temp.has_key? (element)
            output << element
        end
    end
    puts output
end
def compare_2 (arr_1, arr_2)
    out = []
    arr_1.each do |num|
        if (!arr_2.include?(num))
            out << num
        end
    end
    puts out
end

根据“基准”,第一种方法可能更快,大概是通过使用哈希。有没有更整洁的方式编写这些内容或实现此目的?

compare_1 times:

    0.000000   0.000000   0.000000 (  0.003001)

compare_2 times:

    0.047000   0.000000   0.047000 (  0.037002)
米卡

上面的代码应该找到array_2中缺少的array_1中的数字

正如SteveTurczyn所说的,你可以做到 array_1 - array_2

这是数组差异的定义

返回一个新数组,该数组是原始数组的副本,删除了也出现在other_ary中的所有项目。该顺序保留在原始数组中。

它使用其哈希值和eql比较元素?效率的方法。

[ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ]  #=>  [ 3, 3, 5 ]

编辑

关于性能,我通过收集该线程的信息进行了基准测试

################################################
# $> ruby -v
# ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin12.0]
################################################
require 'benchmark'

def compare_1 arr_1, arr_2
    output = []

    temp = arr_2.each_with_object(Hash.new(0)) { |val, hsh| hsh[val] = 0 }

    arr_1.each do |element|
        if !temp.has_key? (element)
            output << element
        end
    end
    output
end

def compare_2 arr_1, arr_2
    out = []
    arr_1.each do |num|
        if (!arr_2.include?(num))
            out << num
        end
    end
    out
end

require 'set'
def compare_3 arr_1, arr_2
  temp = Set.new arr_2
  arr_1.reject { |e| temp.include? e }
end

def native arr_1, arr_2
  arr_1 - arr_2
end




a1 = (0..50000).to_a
a2 = (0..49999).to_a
Benchmark.bmbm(11) do |x|
  x.report("compare_1:") {compare_1(a1, a2)}
  x.report("compare_2:") {compare_2(a1, a2)}
  x.report("compare_3:") {compare_3(a1, a2)}
  x.report("native:")    {native(a1, a2)}
end
################################################
# $> ruby array_difference.rb
# Rehearsal -----------------------------------------------
# compare_1:    0.030000   0.000000   0.030000 (  0.031663)
# compare_2:   71.300000   0.040000  71.340000 ( 71.436027)
# compare_3:    0.040000   0.000000   0.040000 (  0.042202)
# native:       0.030000   0.010000   0.040000 (  0.030908)
# ------------------------------------- total: 71.450000sec
#
#                   user     system      total        real
# compare_1:    0.030000   0.000000   0.030000 (  0.030870)
# compare_2:   71.090000   0.030000  71.120000 ( 71.221141)
# compare_3:    0.030000   0.000000   0.030000 (  0.034612)
# native:       0.030000   0.000000   0.030000 (  0.030670)
################################################

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据Ruby中唯一的哈希键比较带有散列的数组的最有效方法

来自分类Dev

根据Ruby中唯一的哈希键比较带有散列的数组的最有效方法

来自分类Dev

比较PHP中对象的两个数组的最有效方法

来自分类Dev

比较数据的最有效方法

来自分类Dev

基于Ruby on Rails中定义的数组的最有效的按字符串排序的方法

来自分类Dev

Ruby on Rails-比较两个大型数组以获取不匹配结果的最有效方法

来自分类Dev

从Java中的数组制作直方图的最有效方法

来自分类Dev

在JavaScript中搜索数组映射的最有效方法

来自分类Dev

从Java中的数组制作直方图的最有效方法

来自分类Dev

在JavaScript中搜索数组映射的最有效方法

来自分类Dev

从数组删除的最有效方法?

来自分类Dev

将 2D numpy 数组中的每个元素与其 8 个邻居进行比较的最有效方法

来自分类Dev

Ruby:比较两个数组的有效方法

来自分类Dev

在Ruby中获取两个日期之间的Date对象数组的最有效方法是什么?

来自分类Dev

React useEffect():比较两个对象数组是否相等的最有效方法

来自分类Dev

比较长字符串数组的最有效方法

来自分类Dev

抓取对象且数组中没有任何重复项的最有效方法

来自分类Dev

比较公式,这是最有效的

来自分类Dev

Ruby 在此类文件中搜索单词的最有效方法是什么

来自分类Dev

从JavaScript中从大型数组中删除单个元素的最有效方法是什么?

来自分类Dev

增长数组C ++的最有效方法

来自分类Dev

增长数组C ++的最有效方法

来自分类Dev

(AngularJS) 全局替换数组中值的最有效方法

来自分类Dev

搜索对象值数组的最有效方法

来自分类Dev

在字节数组中查找模式的最有效方法

来自分类Dev

在JavaScript数组中检查数字序列的最有效方法是什么?

来自分类Dev

在JavaScript中合并多个排序对象数组的最有效方法是什么?

来自分类Dev

JavaScript在数组中查找对象的最有效方法

来自分类Dev

在vb.net中对字节数组进行异或的最有效方法

Related 相关文章

  1. 1

    根据Ruby中唯一的哈希键比较带有散列的数组的最有效方法

  2. 2

    根据Ruby中唯一的哈希键比较带有散列的数组的最有效方法

  3. 3

    比较PHP中对象的两个数组的最有效方法

  4. 4

    比较数据的最有效方法

  5. 5

    基于Ruby on Rails中定义的数组的最有效的按字符串排序的方法

  6. 6

    Ruby on Rails-比较两个大型数组以获取不匹配结果的最有效方法

  7. 7

    从Java中的数组制作直方图的最有效方法

  8. 8

    在JavaScript中搜索数组映射的最有效方法

  9. 9

    从Java中的数组制作直方图的最有效方法

  10. 10

    在JavaScript中搜索数组映射的最有效方法

  11. 11

    从数组删除的最有效方法?

  12. 12

    将 2D numpy 数组中的每个元素与其 8 个邻居进行比较的最有效方法

  13. 13

    Ruby:比较两个数组的有效方法

  14. 14

    在Ruby中获取两个日期之间的Date对象数组的最有效方法是什么?

  15. 15

    React useEffect():比较两个对象数组是否相等的最有效方法

  16. 16

    比较长字符串数组的最有效方法

  17. 17

    抓取对象且数组中没有任何重复项的最有效方法

  18. 18

    比较公式,这是最有效的

  19. 19

    Ruby 在此类文件中搜索单词的最有效方法是什么

  20. 20

    从JavaScript中从大型数组中删除单个元素的最有效方法是什么?

  21. 21

    增长数组C ++的最有效方法

  22. 22

    增长数组C ++的最有效方法

  23. 23

    (AngularJS) 全局替换数组中值的最有效方法

  24. 24

    搜索对象值数组的最有效方法

  25. 25

    在字节数组中查找模式的最有效方法

  26. 26

    在JavaScript数组中检查数字序列的最有效方法是什么?

  27. 27

    在JavaScript中合并多个排序对象数组的最有效方法是什么?

  28. 28

    JavaScript在数组中查找对象的最有效方法

  29. 29

    在vb.net中对字节数组进行异或的最有效方法

热门标签

归档