- 浏览: 1381880 次
- 性别:
- 来自: 陕西.西安
文章分类
最新评论
-
dare_:
经过试验 设置之后反而更慢没有调用ensureCapacity ...
ensureCapacity()方法提高ArrayList的初始化速度 -
wangchao9053:
[flash=200,200][url][img][list] ...
Only the original thread that created a view hierarchy can touch its views的相关 -
cyb504:
考虑将rb文件代码隐藏:我先使用命令jrubyc将所有rb文件 ...
Ruby学习十 JRuby中调用java代码 -
4562xse3460:
大哥,您这个写反了,差点误导我,我觉得看着就不对。百度第一条就 ...
portrait表示纵向,landscape表示横向 -
yin138:
portrait是肖像画,即竖屏,landscape是风景画, ...
portrait表示纵向,landscape表示横向
http://hi.baidu.com/hackerbase/blog/item/c38eb58f0bab71e2f11f3638.html
小知识:
叹号! 一般用到这个时候,是修改自身
问号? 一般用到这个的时候,时返回布尔
符号[] 代表是数组
符号{} 代表散列
--------------------------------------------------------------------
01.数组的创建和初始化
a = Array.[](1,2,3,4)
b = Array[1,2,3,4]
c = [1,2,3,4]
d = Array.new #创建一个空数组
e = Array.new(3) #[nil,nil,nil] 初始大小3
f = Array.new(3,"xx") #["xx","xx","xx"] 初始大小3 初始值"xx"
f[0].capitalize! #=> ["Xx","Xx","Xx"]
g = Array.new(3){"yy"} #=> ["yy","yy","yy"]
g[0].capitalize! #=>["Yy","yy","yy"]
--------------------------------------------------------------------
02.数组元素的访问和赋值
a = [1,2,3,4,5,6]
b = a[0] #=>1 第1位
c = a.at[0] #=>1 当1位时
d = a[-2] #=>5 倒数第2位
e = a.at[-2] #=>5 当倒数第2位
f = a[9] #=>nil 不存在第9位
g = a.at[9] #=>nil 当第9位不存在
h = a[3,3] #=>[4,5,6] 从第4位开始,一共3个
i = a[2..4] #=>[3,4,5] 第2位后 到第4位之间
j = a[2...4] #=>[3,4] 第2位后 到第4位之前(不包括4位)
a[1] = 8 #=> [1,8,3,4,5,6] 第2位被重新复制
a[1,3] = [10,30,30] #=> [1,10,30,30,5,6] 从第2为开始替换数组 共3位
a[0..3] = [2,4,6,8] #=> [2,4,6,8,5,6] 从第1位开始到第4位 替换
a[-1] = 12 #=> [2,4,6,8,5,12] 替换最后一位
k = [2,4,6,8,10]
k[1..2] = [3,3,3] #=>[2,3,3,3,8,10] 替换第2位~第三位之间的
k[7] = 99 #=> [2,3,3,3,8,10,nil,99] 第8位增加99 第7位不存在
m = [1,3,5,7,9]
m[2] = [20,30] #=> [1,2,[20,30],7,9] 把第3位替换为此数组
m = [1,3,5,7,9]
m[2..2]=[20,30] #=> [1,2,20,30,7,9] 在第2位之间加入数组
x = [0,2,4,6,8,10,12]
a = x.slice(2) #=>4 取第3位
b = x.slice(2,4) #=>[4,6,8,10] 从第3位开始取 4个数
c = x.slice(2..4) #=>[4,6,8] 从第3位..到第5位
x.first #=>0 取第1位
x.last #=>12 取最后1位
x = [10,20,30,40,50,60]
y = x.values_at(0,1,4) #=>[10,20,50] 值在1位 2位 5位时,分别是什么
z = x.values_at(0..2,5) #=>[10,20,50,60] 值在1位~3位之间,6位分别是什么
--------------------------------------------------------------------
03.确定数组的长度
x = ["a","b","c","d"]
a = x.length #=>4
a = x.size #=>4
y = [1,2,nil,nil,3,4]
c = y.size #=>6
d = y.length #=>6
e = y.nitems #=>4
--------------------------------------------------------------------
04.数组的比较
a = [1,2,3,9,9]
b = [1,2,4,1,1]
c = a <=> b #=> -1 意思是 a<b 从左到右,依次比较,左侧优先级高
d = [1,2,3]
e = [1,2,3,4]
c = a <=> b #=> -1 意思是 a<b 元素相同,末尾相同,则较长数组更大
定义一个比较方法class Comparable,因为数组默认只有 <=> 现在通过自写class增加 < > <= >=
class Comparable
def <(other)
(self <=>other) == -1
end
def <=(other)
(self < other) or (self == other)
end
def >(other)
(self <=> other) == 1
end
def >=(other)
(self > other) or (self == other)
end
end
然后就可以直接数组 a < b 返回true
--------------------------------------------------------------------
05.数组的排序
words = %w(the quick brown fox) #定义数组
words.sort #=> ["brown","fox","quick","the"] #sort进行排序
正常排序
a.sort #=> ["1", "2", "3", "5", "6", "four", "three", "two"]
另一方法比较排序 返回1
a.sort{|x,y| x.to_s <=> y.to_s} #=> ["1", "2", "3", "5", "6", "four", "three", "two"]
相反比较排序 返回-1
a.sort{|x,y| x.to_s <=> y.to_s} #=> ["two", "three", "four", "6", "5", "3", "2", "1"]
文件大小排列
files.sort{|x,y| File.size(x) <=> File.size(y)}
或
files.sort_by{|x| File.size(x)}
按名字,年龄,身高排列
lists.sort_by{|x| x.name,x.age,x.height}
--------------------------------------------------------------------
06.根据条件从数组中选择,(数组中查询)
x = [5,8,12,9,4,30]
x.detect{|e| e%6 ==0} #=>12 可以被6整除(取余为0的)
x.find{|e| e%2 ==0} #=>8 可以被2整除(取余为0的) 只返回第一个数组
x.find_all{|e| e%2 ==0} #=>[8,12,4,30] 可以被2整除(取余为0的) 返回所有满足条件的
x.select{|e| e%2 ==0} #=>[8,12,4,30] 可以被2整除(取余为0的) 返回所有满足条件的
取相反的
x.reject{|e| e%2 ==0} #=>[5,9] 可以被2整除(取余为0的) 返回所有满足相反条件的
正则查询
a = %w[January February March April May]
#=> ["January", "February", "March", "April", "May"]
a.grep(/ary/)
#=> ["January", "February"]
a.grep(/ary/){|i| i.length}
#=> [7, 8] 查询出来的内容转换为个数.
查询12到24之间的数平方
b = [1,20,5,7,13,33,15,28]
#=> [1, 20, 5, 7, 13, 33, 15, 28]
b.grep(12..24){|n| n*n}
#=> [400, 169, 225]
找最大最小
a.max #=> "May"
a.min #=> "April"
翻转一下对比结果
a.min{|x,y| x.reverse <=> y.reverse}
#=> "March"
a.max{|x,y| x.reverse <=> y.reverse}
#=> "February"
索引最大最小位置
a.index a.min
#=> 3
a.index a.max
#=> 4
--------------------------------------------------------------------
07.使用专门的索引函数
08.实现稀疏矩阵
参照<the ruby way>168页
--------------------------------------------------------------------
09.数组作为数字合集
删除重复项(uniq或uniq!)
a=[1,2,3,4,5]
b=[3,4,5,6,7]
c = a | b
#=> [1, 2, 3, 4, 5, 6, 7] "或"集合
d = a & b "与"集合
#=> [3, 4, 5]
e = a - b
#=> [1,2] "差"集合
f = a |= b
#=> [1, 2, 3, 4, 5, 6, 7] 累积 等同 "或"集合
class Array
def ^(ohter)
(self | other) - (self & other)
end
end
x=[1,2,3,4,5]
y=[3,4,5,6,7]
z=x^y
#=>[1,2,6,7] 查不同
查是否存在
x = [1,2,3]
x.include? 2
#=>true
例如:
if x.include? 2
puts "yes"
else
puts "no"
end
例如: in
class Object
def in(other)
other.include? self
end
end
2.in x
#=>true 在x中有 2
例如:subset?
class Array
def subset?(other)
self.each do |x|
if !(other.include? x)
return false
end
true
end
def superset?(other)
other.subset?(self)
end
end
a=[1,2,3,4]
b=[2,3]
c=[2,3,4,5]
flag1=c.subset? a #false c是a的子集么?
flag2=b.subset? a #true b是a的子集么?
flag3=c.superset? b #true 相反b是c子集么?
定义通用集,执行差集
universe = [1,2,3,4,5,6]
a = [2,3]
b = universe - a
其他计算集合的 参照172页
--------------------------------------------------------------------
10.数组的随机化
class Array
def randomize
self.sort_by{rand} #Kernel模块中的rand方法
end
def randomize!
self.replace(self.randomize)
end
end
x=[1,2,3,4,5]
y=x.randomize #=> [3,2,4,1,5]
x.randomize! #=> x现在是[3,5,4,1,2] "叹号"意思直接修改自己
随机选取数组中一个元素
def pick_random
self[rand(self.length)]
end
x.pick_random #=> 2 随机返回一位,即 x[rand(x.length)]
--------------------------------------------------------------------
11.使用多位数组
class Array3
def initialize
@store =[[[]]]
end
def [][a,b,c]
if @store[a]==nil ||
@store[a][b]==nil ||
@store[a][b][c]==nil
return nil
else
return @store[a][b][c]
end
end
def []=(a,b,c,x)
@store[a] = [[]] if @store[a]=nil
@store[a][b] = [] if @store[a][b]=nil
@store[a][b][c] = x
end
end
x=Array3.new
x[0,0,0]=5
x[0,0,1]=6
x[1,2,3]=99
puts x[1,2,3]
--------------------------------------------------------------------
12.找出一个数组中而不再另一个数组用的元素(差集)
text = %w[the magic words are squeamish ossifrage]
#=> ["the", "magic", "words", "are", "squeamish", "ossifrage"]
dictionary = %w[an are magic the them these words]
#=> ["an", "are", "magic", "the", "them", "these", "words"]
unknown = text - dictionary
#=> ["squeamish", "ossifrage"]
--------------------------------------------------------------------
13.数组的变换或映射
x = %w[alpha bravo charlie delta echo foxtrot]
#=> ["alpha", "bravo", "charlie", "delta", "echo", "foxtrot"]
a = x.collect{|w| w[0..0]}
#=> ["a", "b", "c", "d", "e", "f"]
a = x.collect{|w| w.length}
#=> [5, 5, 7, 5, 4, 7]
c = x.map{|w| w.length}
#=> [5, 5, 7, 5, 4, 7]
x.collect!{|w| w.upcase}
#=> ["ALPHA", "BRAVO", "CHARLIE", "DELTA", "ECHO", "FOXTROT"]
x.map!{|w| w.reverse}
=> ["AHPLA", "OVARB", "EILRAHC", "ATLED", "OHCE", "TORTXOF"]
--------------------------------------------------------------------
14.删除数组中的nil元素
a = [1,2,nil,3,nil,4,5]
#=> [1, 2, nil, 3, nil, 4, 5]
a.compact
#=> [1, 2, 3, 4, 5]
a.compact!
#=> [1, 2, 3, 4, 5]
a
#=> [1, 2, 3, 4, 5]
--------------------------------------------------------------------
15.删除数组中特定元素
a = [10,12,14,16,18]
#=> [10, 12, 14, 16, 18]
a.delete_at(3)
#=> 16 #删除第4位,返回被删除对象,如果不存在返回nil
a
#=> [10, 12, 14, 18]
a.delete(10)
#=>10 #返回10
x = %w[alpha bravo charlie delta echo foxtrot]
#=> ["alpha", "bravo", "charlie", "delta", "echo", "foxtrot"]
x.delete("delta"){"不存在已经被删除"}
#=> "delta" #否则返回 "不存在已经被删除"
x.delete_if{|y| y.length==7}
#=> ["alpha", "bravo", "delta"] #删除指定条件的,没有修改返回nil 和reject!相似
a = x.slice(2)
#=> "charlie" #删除第3位
a = x.slice!(2)
=> "charlie" #删除第3位,并修改x
x.pop
=> "foxtrot" #从数组最右侧开始删除,并修改x
x.shift
=> "alpha" #从数组最右侧开始删除,并修改x
arr = [1,2,3,4,5,6,7,8]
odd = arr.reject{|x| x%2 == 0}
#=>[1,3,5,7] #用reject后接代码块
x.clear
#=>[] #删除数组所有
--------------------------------------------------------------------
16.数组的拼接和附加(<< + -= concat)
x=[1,5,9]
#=> [1, 5, 9]
x << 13
#=> [1, 5, 9, 13]
x << 16 << 18
#=> [1, 5, 9, 13, 16, 18] #主要时<< 这个符号加入附加
x=[1,2]
y=[3,4]
z=[5,6]
b=y+z
#=> [3, 4, 5, 6]
b +=x
#=> [3, 4, 5, 6, 1, 2]
z.concat y
#=> [5, 6, 3, 4]
--------------------------------------------------------------------
17.用数组用作栈或队列
push 在数组末尾添加
pop 在数组末尾删除
shift 删除数组开头元素
unshift 在开头添加元素
--------------------------------------------------------------------
18.对数组进行迭代
list=%w(i am chong mu)
list.each do |x|
p "#{x}"
end
按顺序迭代
words = %w(Son I am able she said)
#=> ["Son", "I", "am", "able", "she", "said"]
str=""
#=> ""
words.reverse_each{|w| str += "#{w} "}
#=> ["Son", "I", "am", "able", "she", "said"]
str
#=> "said she able am I Son" #返回反向字符串
将素和索引都传递给代码块
x=["alpha","beta","gamma"]
#=> ["alpha", "beta", "gamma"]
x.each_with_index do |x,i|
puts "Element #{i} is #{x}"
end
Element 0 is alpha
Element 1 is beta
Element 2 is gamma
=> ["alpha", "beta", "gamma"]
按随机对数组进行迭代
def random_each
temp = self.random
temp.each{|x| yield x}
end
words.random_each{|x| str += "#{x} "}
str #是一个随机的排列
--------------------------------------------------------------------
19.插入分隔符以形成字符串
words = %w(Son I am able she said)
#=> ["Son", "I", "am", "able", "she", "said"]
words.join(",")
#=> "Son,I,am,able,she,said"
words * " and "
#=> "Son and I and am and able and she and said"
list = %w[A B C D E F]
#=> ["A", "B", "C", "D", "E", "F"]
b=list[0..-2] * ", " + ", and " + list[-1]
#=> "A, B, C, D, E, and F"
--------------------------------------------------------------------
20.颠倒数组
a=[1,2,3]
#=> [1, 2, 3]
a.reverse
#=> [3, 2, 1]
a.reverse!
#=> [3, 2, 1]
a
#=> [3, 2, 1]
--------------------------------------------------------------------
21.删除数组中重复的元素
a=[2,3,3,2,6,5,9,8,7]
#=> [2, 3, 3, 2, 6, 5, 9, 8, 7]
a.uniq
#=> [2, 3, 6, 5, 9, 8, 7]
a
#=> [2, 3, 3, 2, 6, 5, 9, 8, 7]
a.uniq!
#=> [2, 3, 6, 5, 9, 8, 7]
a
#=> [2, 3, 6, 5, 9, 8, 7]
--------------------------------------------------------------------
22.数组的交织
a=[1,2,3,4]
#=> [1, 2, 3, 4]
b=["a","b","c","d"]
#=> ["a", "b", "c", "d"]
c=a.zip(b)
#=> [[1, "a"], [2, "b"], [3, "c"], [4, "d"]]
c
#=> [[1, "a"], [2, "b"], [3, "c"], [4, "d"]]
d=c.flatten
#=> [1, "a", 2, "b", 3, "c", 4, "d"]
--------------------------------------------------------------------
23.计算数组中值的频率
class Array
def count
k=Hash.new(0)
self.each{|x| k[x]+=1}
k
end
end
meal=%w[spam spam eggs ham eggs spam]
items=meal.count
#items is {"ham"=>1,"spam"=>3,"eggs"=>2}
spams=items["spam"] #3
--------------------------------------------------------------------
24.将数组颠倒为散列
class Array
def invert
h={}
self.each_with_index{|x,i| h[x]=i}
h
end
end
a=["red","yellow","orange"]
#=> ["red", "yellow", "orange"]
a.invert
#=> {"orange"=>2, "red"=>0, "yellow"=>1}
--------------------------------------------------------------------
25.同步多个数组的排序
class Array
def sort_index
d=[]
self.each_with_index{|x,i| d[i]=[x,i]}
if block_given?
d.sort{|x,y| yield x[0],y[0].collect{|x| x[1]}}
else
d.sort.collect{|x| x[1]}
end
end
def sort_with(ord=[])
return nil if self.length!=ord.length
self.values_at(*ord)
end
end
a=[21,33,11,34,36,24,14]
b=a.sort_index
a2=a.sort_with(b)
c=a.sort_index{|x,y| x%2 <=> y%2}
a3=a.sort_with(c)
p a #[21,33,11,34,36,24,14]
p b #[2,6,0,5,1,3,4]
p a2 #[11,14,21,24,33,34,36]
p c #[6,5,4,3,2,1,0]
p a3 #[14,24,36,34,11,33,21]
--------------------------------------------------------------------
26.给新数组元素指定默认值
a = Array.new
#=> []
a[0]="x"
#=> "x"
a[3]="y"
#=> "y"
a
#=> ["x", nil, nil, "y"]
class ZArray < Array
def [](x)
if x >size
for i in size+1..x
self[i]=0
end
end
v = super(x)
end
def []=(x,v)
max=size
super(x,v)
if size - max > 1
(max..size-2).each do |i|
self[i]=0
end
end
end
end
num=ZArray.new
num[1]=1
num[2]=4
num[5]=25
#=>num is now [0,1,4,0,0,25]
发表评论
-
rsync参数详解、利用ssh、rsync 实现数据的定时同步
2012-09-11 14:52 1704http://colderboy.blog.51cto.com ... -
putty
2011-12-02 10:50 1120http://www.iteye.com/topic/5606 ... -
haml
2011-12-01 22:53 1141http://aideehorn.iteye.com/blog ... -
ruby 生成随机数 和 随机字符串
2011-11-30 22:42 3536ruby 生成随机数 和 随机字符串 1,ra ... -
ruby and watir学习之_Hash 类
2011-11-20 17:53 1655http://www.cnblogs.com/zhangfei ... -
gem相关命令使用
2011-11-19 00:01 2852http://www.cnblogs.com/orez88/a ... -
Rails,启动-重要
2011-11-17 09:59 1792http://www.blogjava.net/sshwsfc ... -
使用 RSpec 进行行为驱动测试,配置分析
2011-11-11 13:21 1589http://huangzhimin.com/ < ... -
ruby的class与module的区别
2011-11-07 10:04 2371http://blog.163.com/rettar@126/ ... -
ruby invalid multibyte char (US-ASCII)
2011-11-05 01:57 4693要加上: # encoding: utf-8 一般要 ... -
File.split(pathname)
2011-11-05 01:42 2247http://www.kuqin.com/rubycndocu ... -
Ruby怎样获取操作系统的Name
2011-11-05 01:30 1293http://bbs.chinaunix.net/thr ... -
Ruby String#unpack
2011-10-31 11:34 1299http://fuliang.iteye.com/blog/6 ... -
ruby环境变量的文件读取形式
2011-10-31 11:29 1860http://blog.csdn.net/normallife ... -
Ruby学习九 排序 sort
2011-10-26 20:06 3582h = ['1','10','11','2','4']A. p ... -
关于rails插件will_paginate的配置和用法
2011-10-26 15:56 4378http://selfcontroller.iteye.com ... -
ruby 中的 && ,|| ,!! (转)
2011-10-26 14:59 966http://selfcontroller.iteye.com ... -
Ruby中 respond_to? 和 send 的用法 .
2011-10-26 14:19 5362http://selfcontroller.iteye.com ... -
ruby 在线正则表达式 编辑器
2011-10-25 09:22 1751http://www.rubular.com/ -
ruby-Jruby,Xruby 转
2011-10-25 09:22 891ruby-Jruby,Xruby 2009年06月21 ...
相关推荐
今天学习的是数组和Hash,数组在很多编程语言中都能常常用到。 数组: 数组是存储数据的一种容器,在Ruby中,数组中存储的数据可以是任何类型的数据;这和JAVA不同,在JAVA中,数组是存储同一类型数据的结构。 1. 在...
Ruby中的数组是动态数组,存储的数据不用限定类型,数组的长度是根据存储需要动态扩展,所以,在进行数据定义的时候,只用用最简单的方式new一个Array对象就可以了,可以使用以下几种方式: 代码如下: arr1=[] #最...
"Ruby新手学习书"和"Rails_4_days"这两个资源是为初学者设计的,旨在帮助他们快速掌握Ruby语言的基础以及Rails框架的核心概念。 在Ruby语言中文教程中,你将学到以下关键知识点: 1. **基础语法**:Ruby的语法简洁...
在学习Ruby的过程中,你还需要了解一些工具,如Ruby的解释器irb(交互式Ruby环境)和ri/rdoc(Ruby文档工具),它们有助于调试和理解代码。版本管理工具如RVM(Ruby Version Manager)和rbenv可以帮助你管理多个Ruby...
本"Ruby学习指南"旨在帮助初学者快速掌握Ruby的基础知识,同时也为有一定经验的开发者提供深入学习的资源。 1. **Ruby基础** - 变量:Ruby有五种变量类型,包括局部变量、实例变量、类变量、全局变量和常量,它们...
在Ruby编程语言中,数组(Array)是一种非常重要的数据结构,它允许你存储多个值在...在实际开发中,你还会遇到更多高级特性和使用场景,例如迭代数组、查找特定元素、排序数组等,这都需要通过不断学习和实践来提高。
Ruby的数组可以通过转换为Hash,但这要求数组必须包含偶数个元素。具体操作时,使用星号(*)操作符配合Hash构造函数可以实现数组到Hash的转换。 在Ruby的方法中,如果方法名末尾带有感叹号(!),表示该方法会改变原有...
从给定的文件信息中,我们可以提炼出一系列关于Ruby编程语言的重要知识点,涵盖基础语法、变量类型、...以上总结了Ruby的一些基础知识点,这些内容对于初学者掌握Ruby编程语言至关重要,同时也是进一步深入学习的基石。
3. **Ruby Select**: Select方法用于过滤数组中的元素,根据提供的条件返回满足条件的元素的新数组。例如,找出所有偶数: ```ruby numbers = [1, 2, 3, 4, 5] even_numbers = numbers.select { |n| n.even? } ...
本书面向希望学习Ruby语言的初学者以及已经有一定编程基础但想深入了解Ruby特性的开发者。 - **风格**:本书采用实战导向的方式进行讲解,旨在通过实践让读者掌握Ruby的核心概念和技术。 - **目标读者**:适合对Ruby...
这个笔记里包含了ruby的整型,字符串,浮点数,布尔等基础数据类型,还有数组,哈希hash的用法, 类的定义,函数方法,以及对象定义,其他高级用法解释,除了笔记记录的语法糖之外,还包含了一些解释性的代码,帮助...
3. **Ruby编译器改进**:内部编译器的优化使得代码运行更快,同时减少了内存消耗,提升了整体性能。 4. **线程局部变量**:Ruby 3.1增加了对线程局部变量的支持,这些变量在每个线程中都有独立的副本,提高了多线程...
此外,你还会学习到Ruby的模块系统,它是组织代码和实现命名空间的一种方式。 Ruby的块(blocks)和 Proc 对象是其独特之处,它们提供了简洁的回调函数和迭代器。书中会深入解释这些概念,并通过实例展示它们在实际...
### Programming Ruby 1.9 3rd Edition:深入探索Ruby编程语言 #### 一、书籍概览 《Programming Ruby ...通过学习本书,读者将能够更好地理解Ruby的核心概念,并能够利用这些知识来构建高效、可靠的Ruby应用程序。
此外,Ruby的块(Block)和 Proc 对象让函数式编程变得简单,例如使用`each`方法遍历数组: ```ruby fruits = ["Apple", "Banana", "Cherry"] fruits.each { |fruit| puts fruit } ``` 元编程是Ruby的另一个强大特性...
Ruby支持五种基本的数据类型:符号(Symbol)、字符串(String)、数字(Numeric)、数组(Array)和哈希(Hash)。变量分为四种:局部变量(以小写字母或下划线开头)、实例变量(以`@`开头)、类变量(以`@@`开头...
2. **Ruby语法基础**:学习Ruby的基本语法结构,如变量(本地变量、实例变量、类变量、全局变量)、数据类型(字符串、数字、数组、哈希)、控制流(条件语句、循环)、函数和方法定义。 3. **面向对象编程**:理解...