`
Anleb
  • 浏览: 32743 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ruby数组自带方法与自定义方法的性能测试集+1个循环问题

阅读更多
主要是交流,水平有限,喜欢研究,多多包涵。

先说一个数组循环问题
arr=[1,2,3]
n=arr << arr
p n

输出:
[1, 2, 3, [...]]

分析:
<< 传进去的是一个arr指针 # =>[1,2,3,arr]
其实这是一个循环,真实的值是:[1,2,3,[1,2,3,[1,2,3,[1,2,3,........]]]
arr[3]=arr
arr[3][3]=arr


ruby数组比较常用的方法:
1.at方法
arr=[1,2,3]
p arr.at(2)
p arr[2]


其实:at比[]方法要效率一点,因为它不接受range参数
测试:
require 'benchmark'

n=(1..1000000).to_a
l=n.length
Benchmark.bm do |bm|
    bm.report("at") do 
        i=0
        while i< l
            n.at(i)
            i+=1
        end
    end

    bm.report("[]") do 
        i=0
        while i< l
            n[i]
            i+=1
        end
    end
    
end
输出:
      user     system      total        real
at  0.610000   0.000000   0.610000 (  0.609000)
[]  0.625000   0.000000   0.625000 (  0.625000)

结论:大数组的获取元素首选at


2.compact delete方法
n=[1,2,3,nil,nil]
p n
n1=n.compact
p n1
n2=n.compact!
p n2
p n


删除数组中nil的元素,带!返回数组本身,如果数组中没有nil,不带!返回Nil,带!返回数组本身。
n=[1,2,3,nil,nil]
p n.delete(nil)
p n

delete方法也可以删除所有nil元素,比较下性能:
require 'benchmark'
n=Array.new(100000000,nil)
n1=Array.new(100000000,nil)
Benchmark.bm do |bm|
    bm.report("delete") do 
        n.delete(nil)
    end

    bm.report("compact") do 
       n1.compact
    end
    
end

      user     system      total        real
delete  0.718000   0.016000   0.734000 (  0.735000)
compact  1.360000   0.062000   1.422000 (  1.453000)

结论:删除元素首选 delete


3.比较下for each while

require 'benchmark'
n=(1..100000).to_a

Benchmark.bm do |bm|
    bm.report("each") do 
        n.each do |d|
            d
        end
    end

    bm.report("for") do 
       for i in n
           i
       end
    end
    bm.report("while") do 
       i=0
       while i< n.length
           n[i]
           i+=1
       end
    end
end
      user     system      total        real
each  0.015000   0.000000   0.015000 (  0.015000)
for  0.016000   0.000000   0.016000 (  0.016000)
while  0.078000   0.000000   0.078000 (  0.078000)

结论:each 很效率

4.flatten方法
n=[1,2,3]
n1=[4,5,6]
n2=[n1,n]
p n2
p n2.flatten
#
[[4, 5, 6], [1, 2, 3]]
[4, 5, 6, 1, 2, 3]


5.sort与自定义方法比较
require 'benchmark'
n=(1..100).to_a
n1=(23..89).to_a
n2=(900..3003).to_a
n=n2+n1+n

#自定义方法是网上找的
def bubble_sort(arr)
  1.upto(arr.length-1) do |i|
    (arr.length-i).times do |j|
      if arr[j]>arr[j+1]
        arr[j],arr[j+1] = arr[j+1],arr[j]
      end
    end
  end
    arr
end


Benchmark.bm do |bm|
    bm.report("sort") do 
        n.sort
    end

    bm.report("personal") do 
       bubble_sort(n)
    end
    
end

      user     system      total        real
sort  0.000000   0.000000   0.000000 (  0.000000)
personal  3.109000   0.109000   3.218000 (  3.220000)


结论:坑爹啊,ruby自带方法还是很强大的,首选自带方法sort

6.uniq方法
删除数组的重复元素,测试就不测了,类似于上面的sort.

分享到:
评论

相关推荐

    ruby 数组处理大全.doc

    ruby数组处理大全 如函数名称 说明 示例 &数组与,返回两数组的交集 [1,2] & [2,3] =&gt;[2] *复制数组n次 [1,2]*2 =&gt; [1,2,1,2] +返回两数组的并集,但不排除重复元素 [1,2]+[2,3] =&gt;[1,2,2,3] 追加元素,但不...

    10Ruby 数组.docx

    此外,Ruby 支持负数索引,即索引 -1 表示数组的最后一个元素,-2 表示倒数第二个元素,以此类推。 #### 四、数组的操作与管理 - **创建数组**: - 使用 `Array.new` 创建一个空数组。 ```ruby names = Array....

    ruby数组

    Ruby提供了许多迭代方法来处理数组中的每个元素,如`each`、`map`、`each_with_index`等。例如: ```ruby arr.each { |element| puts element } # 遍历数组并打印每个元素 ``` `map`方法可以对数组中的每个元素进行...

    Ruby-ActiveModel的自定义验证用于检查数组是否包含在另一个中

    这个标题提到的"Ruby-ActiveModel的自定义验证用于检查数组是否包含在另一个中"是一个具体的验证场景,常常在数据校验时会用到,比如确保用户输入的数据符合特定的范围或者限制。 自定义验证是ActiveModel的一个...

    Ruby-性能测试(完整版)

    Ruby性能测试是软件开发过程中一个至关重要的环节,尤其是在使用Ruby这种动态编程语言时。它确保了代码在实际生产环境中的高效运行,避免了资源浪费和潜在的性能瓶颈。本资料包详细介绍了Ruby性能测试的各个方面,...

    Ruby创建数组方法总结

    您可以通过创建一个新的数组对象并将其存储在一个变量中来创建一个空数组。这个数组将为空;您必须用其他变量填充它才能使用它。如果要从键盘或文件中读取内容列表,这是创建变量的一种常见方法。 在下面的示例程序中...

    Ruby数组(Array)学习笔记

    Ruby中的数组是动态数组,存储的数据不用限定类型,数组的长度是根据存储需要动态扩展,所以,在进行数据定义的时候,只用用最简单的方式new一个Array对象就可以了,可以使用以下几种方式: 代码如下: arr1=[] #最...

    Ruby中数组的一些相关使用方法

    负数索引假设数组末尾—也就是说,-1表示最后一个元素的数组索引,-2是数组中最后一个元素的下一个元素等等。 Ruby的数组可以容纳对象,如字符串,整数,长整数,哈希,符号,甚至其他Array对象。Ruby数组没有在其他...

    Ruby基础语法+Ruby变量与数据类型+Ruby控制结构+Ruby函数与方法+Ruby面向对象编程等全套教程

    Ruby函数与方法 Ruby面向对象编程 Ruby模块与包 Ruby错误处理 Ruby文件与I/O操作 Ruby正则表达式 Ruby网络编程 Ruby数据库交互 Ruby测试框架 RubyWeb框架Rails入门 Ruby高级特性 Ruby性能优化与最佳实践

    rubyonrails+Ruby+取得指定月日期数方法

    Ruby on Rails 是一个使用 Ruby 语言编写的开源 web 应用框架,它遵循 MVC(模型-视图-控制器)架构模式。Ruby 是一种高级、解释型、面向对象的脚本语言,其设计哲学强调代码的可读性和简洁的语法。在 Ruby on Rails...

    Ruby-DingTalkBot是阿里钉钉自定义机器人的Ruby库

    Ruby-DingTalkBot是针对阿里钉钉自定义机器人的一款Ruby编程语言实现的库,它使得开发者可以方便地在Ruby环境中与钉钉机器人进行交互,发送各种类型的消息到钉钉群或者个人工作台,从而实现自动化通知、信息推送等...

    如何用Ruby来实现页面性能测试

    标题中的“如何用Ruby来实现页面性能测试”指的是利用Ruby编程语言进行网页性能评估和监控的一种方法。在描述中提到,作者选择了Ruby而非QTP(QuickTest Professional)是因为Ruby具有优于QTP的独特优点,尤其在资源...

    ruby 数组使用教程

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

    ruby测试代码1

    "ruby测试代码1"可能指的是一个具体的测试用例或者测试框架的实例,用于验证Ruby程序的功能和性能。Ruby提供了多种测试工具,如MiniTest、RSpec和Cucumber等,它们各自有其特点和适用场景。 MiniTest是Ruby标准库的...

    Ruby简明教程之数组和Hash介绍

    1. 在Ruby中如何定义数组呢? 使用[ ]来框住元素,而元素之间则使用”,”间隔。如下, 代码如下: name = [“Windy”, “Cindy”, “Amee”, “Tom”] name = [] #声明了一个空数组,未定义的数组 name = [1, ...

    binary_search:用于Ruby数组的本机和纯Ruby二进制搜索和索引方法

    二进制搜索Ruby的数组 二进制搜索是Ruby的Array类中缺少的一种非常方便的算法。 如果我们知道绝对肯定的是,我们正在与正在工作的数组排序,你可以使用二进制搜索通过数组得多的速度远远超过线性搜索,这与指数进行...

    开放Ruby+watir 自动化测试工具介绍+安装说明

    Ruby和Watir(Web Application Testing in Ruby)是一个强大的自动化测试框架,主要用于Web应用程序的测试。Ruby是一种面向对象的、动态的编程语言,以其简洁、优雅的语法和强大的元编程能力而受到开发者的喜爱。...

Global site tag (gtag.js) - Google Analytics