一.
数组的创建 names = ["shiwanyin","jingshang","dapao","xishuai"]
数组对象 数组对象未确定时,用[]表示一个空数组对象。
从数组中抽取对象 names[0]
print "第一个名字为:",names[0],"。\n"
将对象保存到数组中 支持多种不同对象的混合保存。
数组的大小
array.size
数组的循环
names.each do |变量|
希望循环的处理
end
15散列类
15.1复习散列
15.2散列的创建
15.2.1使用{}
{键=>值}
像下面那样指定键值对,键值对之间用逗号,隔开
h1 = {"a"=>"b","c"=>"d"}
p h1["a"] #=>"b"
用符号作为键时
{键:值}
h2 = {a:"b",c:"d"}
p h2 #=>{:a=>"b",:c=>"d"}
15.2.2使用Hash.new
用来创建新的散列的方法。
指定参数值返回
15.3 值的获取与设定
与数组一样,散列也是用[]来实现与键相对应的元素值的获取与设定的。
h = Hash.new
h["R"] = "Ruby"
p h["R"] #=>"Ruby"
还可以用store方法设定值,用fetch方法获取值。下面的例子的执行结果与上面的例子是一样的。
h = hash.new
h.store("R","Ruby")
p h.fetch("R") #=>"Ruby"、(如果散列中不存在指定的键,程序就会发生异常)
对fetch方法指定第二个参数,那么该参数值就会作为键不存在是散列的默认值。
h = Hash.new
p h.fetch("N"){String.new} #=>""
15.3.1
一次性获取所有的键值。由于散列是键值对形式的数据类型,因此获取键值的方法是分开的。
h = {"a" = "b","c" = "d"}
p h.keys #=>["a","c"]
p h.values #=>["b","d"]
p h.to_a #=>[["a","b"],["c","d"]]
除了返回数组,使用迭代器获取散列值。
Number无需声明
字符串类
14.1字符串的创建
str1 = "字符串";str2 = '字符串'。
使用“”时可以执行用#{}括起来的Ruby式子。 这个#{}就称为内嵌表达式。
14.1.1 %Q和%q
创建包含“‘的字符串,使用%Q或者%q会比使用\" \'更简单
desc = %Q{Ruby的字符串中也可以使用’‘和”“} %Q相当于用“”创建字符串
str = %q|Ruby said, 'Hello world' %q相当于用‘’创建字符串
14.1.2
使用Here Document
Here Document 是源自于Unix的shell的一种程序写法。
使用<<创建字符串(创建包含换行的长字符串时这个方法是最简单的)
<<"结束标识符"
字符串内容
结束标识符
<<后面的结束标识符可以用“”括着的字符串(转义字符和内嵌表达式)或者用‘’括着的字符串定义(原封不动的显示)。
Here Document 的结束标识符一定要在行首。在程序缩进较深的地方会出现缩进乱掉的情况。
使用<<- 代替 <<,忽略掉结束标识符前的空格和制表符。结束标识符就没有必要写在行首。
range类
r1=1..5 #定义范围对象r1,包括元素1,2,3,4,5
r2=Range.new(1,5) #等价与1..5
r3=1...5 #定义范围对象r3,包括元素2,3,4
r4=Range.new(1,5,true) #等价与1...5
二。循环
1. times方法
在前面已经有提到过了,语法如下:
复制代码 代码如下:
循环次数.times do 循环次数.times {
重复执行的动作 重复执行的动作
end }
#也可以在times模块中加入变量
5.times { |i|
print "This is the", i+1, " time. \n"
}
# i变量是从0开始计算的
2. for 语句
复制代码 代码如下:
语法:
for 变量 in 开始数值..结束数值 do
反复执行的动作
end
# do是可以省略的
from = 0
to = 20
sum = 0
for i in from..to
sum += 1
end
语法:
for 变量 in 对象
反复执行的动作
end
names = ["Windy", "Cindy", "Jack", "Hugo"]
for name in names
print name, " likes Ruby. \n"
end
第二个语法的for语句,与java中的for each语句非常类似,for (i in list?) {...}
3. while 语句
while语句与JAVA中也是类似的
复制代码 代码如下:
语法:
while 条件 do
反复执行的动作
end
a = 1
sum = 0
while a <10 do
sum += a
i += a
end
4. until 语句
其语法与while语句类似,只是只有条件不符合的时候,才会反复执行循环
复制代码 代码如下:
语法:
until 条件 do
反复执行的动作
end
# do可以省略
sum = 0
until sum >50
sum += 1
end
print sum
# 以上until循环可以转换成下面的while循环
while !(sum >50)
sum += 1
end
5. each 方法
在前面已经提到过这个方法了,这里就简要记录下语法
复制代码 代码如下:
对象.each { |变量|
想要反复执行的动作
}
6. loop方法
它是一种没有结束条件的方法,只是不断进行循环处理,示例如下:
复制代码 代码如下:
loop {
print "Ruby"
}
三。运算符
算术运算符+-*/ 取余% 平方**
比较运算符 >,<,==,!=,>=,<=,===,<=>,.eql?,equal?(区别最后两个) 前者是判断两个数值是否相同,后者是判断是否为同一个数,如果不懂可以继续追问我。
四。正则表达式 这一部分应该是ruby的特色,建议你好好学学。推荐这个地址给你
http://www.runoob.com/ruby/ruby-regular-expressions.html
纯手打
解答:ruby until执行条件为false才执行,意思是只要i比1000000小的话那么就会继续执行,到第十九次的时候,i等于2^19也就是524288,j等于19,此时条件依然为false,所以会继续循环条件的,这时候就得到你所说的那两个值了,然后再判断i与1000000,这时条件为true也就是中止执行了1.print不自动换行,puts会自动换行,一行不够写的话,可以加"\"进行连接ruby 代码
puts 6/2
print 6/1
puts 'hello world'
puts '我们都是'\
'中国人'
运行结果:
ruby 代码
3
6hello world
我们都是中国人
2.==,eql?,equal? 区别
==值相等 eql?值相等,类型相等 equal?值相等,内存地址相等
ruby 代码
a=1
b=1.0
c=1.0
d=1.0
e=c
puts(a==b)#值相等
puts(a.eql?(b)) #值相等,类型相等
puts(c.equal?(d))#值相等,内存地址相等
puts(c.equal?(e))
运行结果:
ruby 代码
true
false
false
true
3.
#<=>比较2个对象的大小,大于,等于,小于分别返回1,0,-1
#===右边对象是否在左边区域里,返回true或false
ruby 代码
puts("abd" <=>"acd")
puts((0..5) === 10)
puts((0..5) === 3.2)
运行结果:
-1
false
true
4.case 分支条件语句
java 代码
x=3
case x
when 1..2
print "x=",x,",在1..2中"
when 4..9,0
print "x=",x,",在4..9,0中"
else
print "x=",x,",其它可能"
end
输出结果:
x=3,其它可能
5.while与until
注:
A:ruby里的字符串连接用的是逗号(java里用的是加号),如:
puts("aaa","bbb")
print("aaa","bbb")
分别输出为aaa换行bbb,aaabbb
B:ruby里好像没有++,所以a++是错误的,只能a=a+1
ruby 代码
a=1
while( a <10 )
print(a," ")
a=a+1
end
b=1
until( b >= 10 )
print(b," ")
b=b+1
end
输出结果为:
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
6. 几个函数说明
print "aa" if i <2
等价于
if i <2
print "aa"
end
ruby 代码
3.times{print "hi"}
1.upto(9){|i| print i if i<7}#|i|可以看成是一个临时的引用变量,供后面使用
9.downto(1){|i| print i if i<7}
(1..9).each{|i| print i if i<7}
0.step(11,3){|i| print i}
运行结果:
hihihi1234566543211234560369