Ruby中数组的&操作
最近在忙一个项目,好久没有写日志了,项目终于接近尾声,可以适当放松一下,所以记一下在这个项目中发现的有趣事情:
数组的 与 操作
- 一直以为两个数组A和B相与,谁前谁后都一样,不过这次在项目中突然想试一下,真是不试不知道一试吓一跳:
- 与 操作,长数组和短数组相与要比短数组和长数组相与更节省时间;
- 排序,对执行时间有影响,但不是特别明显。
- 代码:
#!/usr/bin/ruby
r = Random.new
radix = 10000000
vals1 = 10000000.times.collect {|i| r.rand(radix)}
vals2 = 100000.times.collect {|i| r.rand(radix)}
# 因为随机数,实际长度会小于10000000和100000
vals1_len = vals1.uniq.length
vals2_len = vals2.uniq.length
vals1_sort = vals1.sort
vals2_sort = vals2.sort
# 已排序未去重比较
stime = Time.now
vals1_sort & vals2_sort
etime = Time.now
puts ">>> sorted: #{vals1_len} & #{vals2_len} used #{etime - stime} s <<<"
stime = Time.now
vals2_sort & vals1_sort
etime = Time.now
puts ">>> sorted: #{vals2_len} & #{vals1_len} used #{etime - stime} s <<<"
# 未排序未去重比较
stime = Time.now
vals1 & vals2
etime = Time.now
puts ">>> unsort: #{vals1_len} & #{vals2_len} used #{etime - stime} s <<<"
stime = Time.now
vals2 & vals1
etime = Time.now
puts ">>> unsort: #{vals2_len} & #{vals1_len} used #{etime - stime} s <<<"
# 3次执行结果:
$ ./and_test.rb
>>> sorted: 6321701 & 99471 used 1.255142772 s <<<
>>> sorted: 99471 & 6321701 used 7.265526653 s <<<
>>> unsort: 6321701 & 99471 used 1.552287352 s <<<
>>> unsort: 99471 & 6321701 used 8.896545005 s <<<
$ ./and_test.rb
>>> sorted: 6320949 & 99497 used 1.280619044 s <<<
>>> sorted: 99497 & 6320949 used 7.423779834 s <<<
>>> unsort: 6320949 & 99497 used 1.660184257 s <<<
>>> unsort: 99497 & 6320949 used 9.337629195 s <<<
$ ./and_test.rb
>>> sorted: 6319943 & 99492 used 1.260916227 s <<<
>>> sorted: 99492 & 6319943 used 7.734610427 s <<<
>>> unsort: 6319943 & 99492 used 1.707935118 s <<<
>>> unsort: 99492 & 6319943 used 9.105055703 s <<<
未完,待续...
Ruby中数组的&操作的更多相关文章
- ruby中数组的常用方法----例子
#初始化 a = Array.new p a #=>[] a = Array.new(5) p a #=>[nil, nil, nil, nil, nil] a = Array.new(5 ...
- Ruby中数组的遍历
转自:http://www.jianshu.com/p/8de9b60f9350 Ruby中有几个常用的遍历数组的方法,本人经常容易搞混.这里列出来总结一下. each: 从数组中取出一个元素,作为某 ...
- JSON相关知识,转载:删除JSON中数组删除操作
一:JSON是什么 JSONg格式:对象是一个无序的“名称/值”对的集合. 对象以括号开始,括号结束. 名称冒号分隔值. "名称/值"之间用逗号分隔 例: var people = ...
- JS中数组的操作[转]
1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...
- JS中数组的操作
1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...
- ruby中数组的常用函数
在程序中定义一个数组 在程序中定义一个数组,因为我们在下面说明. fruits = ["apple", "orange", "lemon"] ...
- 【转载】ruby 中数组函数示例(1)(转)
函数名称 说明 示例 & 数组与,返回两数组的交集 [1,2] & [2,3] =>[2] * 复制数组n次 [1,2]*2 => [1,2,1, ...
- ruby中数组认识
a = 1...5这样赋值,a不是数组类型,1...5操作是一种枚举类型. a = ["1","2","3","4"], ...
- ruby中excel简单操作以及文件读取操作方法
# -*-coding:utf-8 -*-#author:kanlijunrequire 'win32ole'require 'fileutils'class ResultAnalyse @@i=0 ...
随机推荐
- 【luogu P2731 骑马修栅栏】 题解
题目链接:https://www.luogu.org/problemnew/show/P2731 这个题是欧拉回路的模板题,那么在这里给出一个hierholzer的做法. 对于求欧拉回路的问题,有Fl ...
- Android学习笔记_53_Android界面的基本属性
很好很全面http://www.eoeandroid.com/forum.php?mod=viewthread&tid=46859 布局: 在 android 中我们常用的布局方式有这么几种: ...
- TDD:代码可测试设计
1 方法内部代码命令,查询分离. a . 命令方法:执行一系列动作. b. 查询方法: 执行查询动作,并返回值. 2 一个类中有好几个地方都用到了一个或多个全局变量,可以考虑把全局变量封装到另外 ...
- mobienet, shufflenet
参考github上各位大神的代码 mobilenet和shufflenet,实现起来感觉还是各种问题. mobilenet目前使用的代码来自这里:https://github.com/BVLC/caf ...
- Spring知识点总结(四)之SpringAOP基础
1. Spring aop中的基本概念 • 连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候.在Spring AOP中,一个连接 ...
- MySQL配置和启动
1.首先下载MySQl安装包,解压安装包 打开mysql下面的bin文件夹,双击如图标记的 .exe运行 2.配置Mysql (1)运行程序后点击 next (2)这里有精确配置和标准配置,根据情况 ...
- RPAD()和LPAD()函数进行字符串的填充
RPAD()函数从右边对字符串使用指定的字符进行填充. 格式:RPAD(string,padded_length,[pad_string]) string 表示:被填充的字符串. padded_len ...
- 你不知道的javaScript笔记(7)
异步:现在与将来 分块的程序 可以把JavaScript 程序写在单独的js 文件中,这个程序是由多个块组成的,这些块 中只有一个是现在执行,其余在捡来执行,最常见的块单位是函数. 例如: funct ...
- 编写可维护的JavaScript---事件处理
在JavaScript应用中事件处理是非常重要的,所有的JavaScript都是通过事件绑定到UI上的. 1. 典型用法 当事件触发的时候,事件对象event会最为回调参数传入到事件处理程序中.eve ...
- 微信小程序navigator无法跳转情况
情况有三种 跳转的页面没有在app.json中注册 跳转的路径不正确 以上两种在命令行(console)中都会提示 跳转的页面在TabBar中,需要将open-type属性是设置为switchTab