LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: sfatsdu

Ruby Code Snippet

[复制链接]
 楼主| 发表于 2005-7-21 21:04:52 | 显示全部楼层
看看哈希的排序:

  1. irb(main):006:0> h
  2. => {"a"=>10, "b"=>30, "c"=>20}
  3. irb(main):007:0> h.sort
  4. => [["a", 10], ["b", 30], ["c", 20]]
  5. irb(main):008:0> h.sort {|a,b| b[1] <=> a[1]}
  6. => [["b", 30], ["c", 20], ["a", 10]]
  7. irb(main):009:0> h.sort {|a,b| b[0] <=> a[0]}
  8. => [["c", 20], ["b", 30], ["a", 10]]
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-22 09:59:38 | 显示全部楼层
一个有重复元素的array,求出各个元素的出现的次数

  1. a = %w{1 2 53 235 2 54 23 54 32}
  2. h = Hash.new(0)
  3. a.each do |ele|
  4.     h[ele] += 1
  5. end
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-25 14:55:59 | 显示全部楼层
判断一个整数是否为质数:

  1. class Integer
  2.         def prime?
  3.                 not(2..Math.sqrt(self).floor).find { |i| self % i == 0 }
  4.         end
  5. end
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-7-25 17:03:49 | 显示全部楼层
perl 打开文件反序打印出来。
print reverse <>;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-26 11:32:07 | 显示全部楼层
Post by sleetdrop
perl 打开文件反序打印出来。
print reverse <>;

请问这里reverse是作用于什么样的对象上?array,hash?
回复 支持 反对

使用道具 举报

发表于 2005-7-26 15:23:30 | 显示全部楼层
Post by sfatsdu
连带着行号一起反序显示
[php]
#!/usr/bin/ruby
require 'enumerator'
lines = File.readlines("file")
lines.to_enum(:reverse_each).each_with_index do |line, index|
index = lines.size-index
printf "%5d %s", index, line
end
[/php]


#tac /etc/passwd | cat -n
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-26 18:26:16 | 显示全部楼层
Post by zxhcxd
#tac /etc/passwd | cat -n

第一次见到tac命令,汗...
Don't work on windows...
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-26 18:41:19 | 显示全部楼层

  1. (1..10).find_all{|i| i%3==0}  # =>[3,6,9]
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-7-27 13:43:17 | 显示全部楼层
Post by sfatsdu
请问这里reverse是作用于什么样的对象上?array,hash?

应该是@array
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-6 12:19:14 | 显示全部楼层
Ruby中的Object和Class有很多奇怪的地方,比如

  1. class Foo
  2.     def foo
  3.         puts "method foo called"
  4.     end
  5. end
  6. a = Foo.new <= A instance of Foo
  7. a.foo => method foo called        <= 呼叫 foo
  8. def a.foo
  9.     puts "method foo has changed"
  10. end
  11. a.foo => method foo has changed          <= 呼叫改变的foo
  12. b = Foo.new
  13. b.foo => method foo called           <= 其他的Foo instance没有改变foo 的行为
复制代码

如果把这个技术用在Class上,就是 metaprogramming
以后再说
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表