shitou's blog 

  • Home
  • About
  • Feed
  • 十人族
  • MIX BOY
  • 塌客

Category "ruby"

25
Sep

ruby中的几个方法学习

总结几个ruby中的方法

 

Kernel#test

 

偶然遇到的,曾经看过的几本书中都没有提到,非常好用, 尤其用在system manage方面

>test(?C, 'a.txt') #返回文件a.txt最近的变动时间

>test(:d, 'a.txt') #返回a.txt是不是目录

 

支持很多操作,非常类似于shell中的test(即[]), 不过功能更多,更多的操作符查看ri文档

 

bm

 

bm是ruby内置gem benchmark的方法,作用就是benchmark(性能测试), 使用前需要先调入

>require 'benchmark'

>include Benchmark

>a = (1..1000000).map { rand(1000000) }

>bm do |b|

> b.report("Sort") { a.sort }

> b.report("Sort by") { a.sort_by { |a| a } }

>end

 

report中的参数用于输出结果中的标签(label)

可以用来测试代码的实行效率,优化时使用

 

Enumerable#inject

 

用于迭代, 每次迭代将返回运算结果, 下一次迭代将跳过之前云算过的项,把上一次运算结果作为起始参数(initial)用于下次迭代, 感觉比较绕口,还是看例子吧

>(5..10).inject { |initial, n| initial + n } #45

>(5..10).inject(1) { |initial, n| initial + n } #46

上面的第一个例子没有赋予初始值,那么就开始运算5 + 6, 将结果赋予initial, 然后进行11 + 7, 依次计算

第二个initial = 1, 所以结果为46

 

一个复杂点的例子

找出最长的字符串

>%W(apple pear banane).inject do |x, y|

> x.length > y.length ? x : y

>end #"banana"

找出最长字符串的长度

>%W(apple pear banane).inject(0) do |x, y|

> x >= y.length ? x : y.length

>end #6

 

sort, sort_by

 

sort_by接受一个参数作为block参数, sort可以不跟block或者传递两个参数给block

>%W(apple pear banane).sort

>%W(apple pear banane).sort_by { |word| word.length }

>%W(apple pear banane).sort { |x, y| x.length <=> y.length }

上面第二个和第三个效果相同

 

复杂点的例子

将当前目录下的文件按照修改时间排序

>files = Dir["*"]

>files.sort { |a, b| File.new(a).mtime <=> File.new(b).mtime }

 

Tags: function

2008-09-25 14:46:28, 767 reviews, comment

send to mailbox

Your email:

TOP

Tags

json Impactjs Canvas fun gen_server superfly PS3 Webgame HTML5 jquery SSH tenerer MooseFS gearman-ruby Gearman MongoDB MochiChat TCP U-ka saegusa IN db command Mai Kuraki Norah Jones log iPhoneException ACG Mac Safari objective-c CouchDB LVS AJAX debian 推荐 AMQP google mail bug gettext Erlang 北京 iptables 架构 tips mysql backup function 我看 postfix 监控 SEO cache Etag memcache thread 进程 线程 无锡 yield file column mixboy xml rss gems ruby shitou shell lighttpd 安全 csrf 公司 nginx linux 模块 apache webserver 朋友 大学 生活 尼古拉斯凯奇 movie 文件同步 笑笑 歌词 auto complete plugin rails music ubuntu blog

Category

  • HTML5[3]
  • iPhone[17]
  • Erlang[11]
  • google[13]
  • 生活[45]
  • 音乐[13]
  • 电影[11]
  • linux[29]
  • web server[6]
  • mail server[3]
  • cluster[1]
  • system manage[9]
  • ruby[20]
  • ruby on rails[28]
  • 开源[4]

Episode

  • MongoDB
  • MochiChat
  • iPhoneException
  • shell
  • thread
  • memcache


Popular Posts

  • 准备开始学习Erlang了(恶狼, 二郎..)
  • Ruby遍历MemCached的key
  • 服务器监控小脚本
  • MySQL Innodb备份
  • [转载]5个有用的ruby gems

Recommended Posts

  • Tri-survive - HTML5 Game
  • Cut the rope - HTML5版
  • json_formatter
  • 在gen_server中spawn新的进程
  • Superfly - Wildflowers
  • 继续凸墙 for Mac OS
  • MongoDB Beijing 2011
  • MongoDB删除map_reduce生成的tmp collection
  • Mai Kuraki - Future Kiss
  • Erlang OOP
  • 用SSH tunnel凸墙
  • Google的语法高亮工具包
  • 大量数据的批量操作
  • 再次被和谐-_-
  • 十人族: 上线了

Friends' blogs

  • levy
  • sphance
  • andreas
  • yangkunlun
  • {:dev=>:wxianfeng}
  • bheye
  • joeydarko

Login

   注册

留言 查看留言

留言

   取消

留言 查看留言


Statistics

  • 访问次数: 316258
  • 今天访问: 53
  • 日志: 213
  • 评论: 4967
  • 音乐: 9
  • 用户: 1759


少年,不点下广告吗!

 

all by shitou

blog comments powered by Disqus

close