ruby基本语法(2)

关于数组

Ruby数组中的数据类型可以不相同并且长度也是可变的。(好聪明啊感觉用的久了就会变笨了,除非你本来就是老手)比如下面的例子

Myarray=[1,2,“ruby”]

Ruby也支持那种-1的表示,比如

arry=[1,2,"ruby"]

puts arry[-4]

puts arry[-3]

puts arry[-2]

puts arry[-1]

puts arry[0]

puts arry[1]

puts arry[2]

puts arry[3]

输出:

1

2

ruby

1

2

ruby

注意这里的下标与实际内容的对应关系

array nil     1    2    ruby    1     2     ruby     nil

index –4   –3   -2     -1     0     1      2        3

注意 ruby里面数组的下标也是从0开始的 数组中的第一个元素的index为0

若是直接输出 ruby[0..-1]相当于把数组中的所有元素都输出来了从index=0d 一直输出到 index=无穷

其他的一些创建数组的方式:
#此种情况数组长度为0 不含任何元素 之后赋值的时候 数组长度会自发增加

array=Array.new

arry=[1,2,"ruby"]

arry[10]="python"

p arry[1..-1]

输出

[2, "ruby", nil, nil, nil, nil, nil, nil, nil, "python"]

#先生成一个range在转化为数组,range也是ruby的一种数据类型,后面再介绍

Range=1..9

Array=range.to_a

在Ruby的数组里 截取操作很灵活 有时候有点matlab的感觉

arry="abcdefg"

puts arry[0]

#从索引为1开始截取,截取长度为3

puts arry[1,3]

#从索引为1开始截取,截取到索引为5,包含5号索引的值

puts arry[1..5]

#从索引为1开始,截取到长度为5,不包含该索引的值

puts arry[1...5]

输出

a

bcd

bcdef

bcde

nil

关于HashMap

Hash对象可以被视为一种特殊的数组,只不过下标不是自然数了,而是自己根据实际情况定义的类型。

Hash对象里的元素都是由两部分组成:key和value两个部分,Hash对象是由一些列在花括号里面的key-value对组成,多个key-value对之间以英文逗号隔开,key和value之间由"=>"隔开,最后一个逗号会被省略

Hash中的一些语法:

创建一个hash 用两个大括号即可 myhash={}

或者看起来比较正规一点的 myhash=Hash.new

my_hash = Hash.new("Trady Blix")

这种方式创建hash的一个好处就是可以设置默认值 若是输入一个不存在的key则结果就不是空值(nil) 而是“Trady Blix ”

添加一个hash其实是比较简单的 myhash[“key”]=value

关于hash 删除的语法为movies.delete(key)

注意后面没有感叹号

.each迭代器可以对hash 或者数组里面的元素进行迭代

下面是一个循环迭代的例子

things = [[1,2,3], ["red", "blue"]]

puts things[0][1]

things.each do |sub_array|

sub_array.each do |item|

puts item

end

end

对hash 进行迭代的话 需要两个相对应的变量

restaurant_menu = {

"noodles" => 4,

"soup" => 3,

"salad" => 2

}

restaurant_menu.each do |item, price|

puts "#{item}: #{price}"

end

注意上面例子中 格式化输出时候 #{ } 形式进行的替换,这样会使输出的语法变简单,不用再进行字符串的拼接

Ruby里面同一种功能总是有各种各样的实现方式,for…in表达式也可以对hash表对象进行迭代:

myhash={"ruby"=>89,"Java"=>82,"python"=>85}

for key,value in myhash

#注意输出value值的时候要转化为string

puts key+"=>"+value.to_s

end

注意设置hash默认值得方法 即使不论 key为什么 value全为默认值(这样所有的value的默认值被设置成了“nothing here”)

h = Hash.new("nothing here")

puts h

# {}

puts h["kitty"]

若是取一个不存在的值得话 hash[“abc”] 则结果会返回一个nil 注意这个nil并不等于false

False代表错误 而nil代表什么都不存在

新玩意 Ruby Symbol

ruby中有一种变量叫做符号变量,即symbol

注意symbol的语法 总是在前面加一个冒号

puts "string".object_id

puts "string".object_id

puts :symbol.object_id

puts :symbol.object_id

12218620

12218400

316648

316648

nil

很显然 同样的两个“string”其实是不同的两个对象 而同样的两个:symbol其实是一样的东西

一个Ruby的小例子:

a="hello"

b="hello"

puts a.object_id

puts b.object_id

puts :a==:b

symbola=:a

puts symbola

a="goodbye"

puts a.object_id

puts symbola==:a

输出来结果如下:

12139700

12139680

false

a

12138880

true

可以看出来 有几点

1变量中同样的内容,不同的变量标识符,实际上是对应的不同的变量(objectid并不相同)

2 同样的变量标识符,即使他们的内容不一致,只要标示符一样,转化过去之后对应的symbol变量就是一样的

You can think of a Ruby symbol as a sort of name. It‘s important to remember that symbols aren‘t strings:

sounds = {

:cat => "meow",

:dog => "woof",

:computer => 10010110,

}

Symbols make good hash keys for a few reasons:

1. They‘re immutable,meaning they can‘t be changed once they‘re created;

2. Only one copy of any symbol exists at a given time, so they save memory;

3. Symbol-as-keys are faster than strings-as-keys because of the above two reasons.(symbol作为key值 速度更快)

Symbol作为hash的key值是很有效果的。因为它在内存中只有一份拷贝 一旦产生,就不再发生变化

注意hash中每个key value元素之间都要加上“,”

Symbol 与 string 是可以相互转化的

:symbol.to_s可以将symbol转化为str

String.to_sym 可以将str转化为symbol

注意 这里如果a=string.to_sym只是将string转化为symbol之后将值传递给了a 但是string本事的值并没有发生改变 这里要特别注意一下

strings = ["HTML", "CSS", "JavaScript", "Python", "Ruby"]

symbols=[]

strings.each do |a|

symbols.push a.to_sym

end

string 与symbols可以进行互相转化

"hello".intern

# ==> :hello

.intern 与.to_sym 可以实现同样的功能

However, the hash syntax has changed in Ruby 1.9. Just when you were getting comfortable!

new_hash = { one: 1,

two: 2,

three: 3

}

虽然冒号放在了后面 但是前面的key值仍然是一个symbol

Using .select to filter the hash

We know how to grab a specific value from a hash by specifying the associated key, but what if we want to filter a hash for values that meet certain criteria? For that, we can use.select.

grades = { alice: 100,

bob: 92,

chris: 95,

dave: 97

}

grades.select {|name, grade| grade < 97}

# ==> {:bob=>92, :chris=>95}

正确代码:

movie_ratings = {

memento: 3,

primer: 3.5,

the_matrix: 5,

truman_show: 4,

red_dawn: 1.5,

skyfall: 4,

alex_cross: 2,

uhf: 1,

lion_king: 3.5

}

good_movies = movie_ratings.select{|k,v| v > 3}

错误代码:

good_movies={}

good_movies=movie_ratings

good_movies.select{|key,value| value >3}

good_movies

要注意 select后面与 { 之间不可以加空格 并且select仅仅是选择出来符合条件的key-value值 而并没有改变原来的 hansh表的值

ruby基本语法(2)

时间: 2024-08-25 21:48:33

ruby基本语法(2)的相关文章

[ruby on rails] 深入(2) ruby基本语法

1. 调试&注释&打印输出 调试 ruby属于解释型语言,即脚本,在linux上,脚本的执行无法三种: 1. 用解释器运行脚本 解释器 脚本文件 即:ruby  脚本文件 2. 直接运行脚本 在脚本文件里面用 #! 脚本解释器 定义好脚本解释器路径,然后再授予脚本执行权限,接着直接运行 ./脚本文件 即可. 3. 在解释器里面运行脚本 [email protected]:/home/ywt/ror_tests/ruby_tests# irb 2.1.5 :001 > str = &q

Ruby基础语法三 :array 和 hash

Array 1. 数组定义:有序列,可容纳任意元素, 下标由0开始 1 array = [1, 'Bob', 4.33, 'another string'] 2 puts array.first #=>1 3 p array.last #=>another string 4 p array[2] #=>4.33 2. 修改数组 1 pop, push, <<, unshift 2 array = [1, 'Bob', 4.33, 'another string'] 3 p a

Ruby基本语法规则

1.Ruby常用数据类型 Numbers, Strings, Booleans my_num = 25 my_boollean = true (or false) my_string = "Ruby" 2.Ruby常用数学计算操作符 加(+) 减 (-) 乘 (*) 除(/) 幂次方 (**) 求余 (%) 3.Ruby 输出操作 puts 带换行 print 不带换行 打印字符串: print "HelloWorld" (不换行) puts "Hello

关于Ruby常用语法案例累积

变量问题: 类变量和方法变量的区别是什么? 类变量:可以直接使用 方法变量:需要实例化后,才能使用该变量 案例一: class Person @@name = "Tom" @@names = "Toms" @@age = 10 def jek @jj = "jj" @@bb="wonter" end def Person.getName return @@name end def Person.getNames return

Ruby基本语法

---恢复内容开始--- 数据类型 大概分为如下几类 Number:1 String:"Jim" Bool:true, false Array:[1,2,3] Hash:{:name=>"Jim",:age=>20} 赋值 Ruby中的变量,不需类型声明 name="jim" #=>jim 命名规则 常量:全都是大写字母.ANDROID_SYSTEM='android' 变量:若不算@,@@,$的话,都是小写字母开头,下划线拼接

ruby入门知识:了解ruby历史及特性

今天给大家分享一下ruby基础教程(http://www.maiziedu.com/course/ruby-px/),主要介绍ruby的来源和ruby的特性,下面就先来看看ruby的简介吧: Ruby是一种纯粹的面向对象编程语言.它由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)创建于1993年. 您可以在 www.ruby-lang.org 的 Ruby 邮件列表上找到松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)的名字.在 Ruby 社区,松本也

Python、Lua和Ruby之优劣

Python.Lua和Ruby之优劣 Python Python的优点:1.Python比其它语言有更多扩展模块.2.在网上可以找到很多Python教程.不仅如此,还有大量的英文书籍和资料.Python.org有很多为初学者准备的依主题组织的资料.教程和编程指南,此外还有很多链接和参考.3.很多人都喜欢Python语言的语法,因为它清晰易读.4.Python在支持库上大占优势,因为它有很多库,而且大部分都有完善的文档支持.5.很多工具可以用于Python,但难以找到适用于Lua和Ruby的. P

如何学习ruby?Ruby学习技巧分享

怎么学习ruby?在学习ruby之前需要掌握哪些知识呢?这是很多想要学习ruby朋友的心声,我不具体给出答案,下面就给大家讲讲一位前辈学习ruby(http://www.maiziedu.com/course/ruby/)的学习历程吧.在大学时学的电子专业,在学校里学过C/汇编,在学习ruby前期,和大多数的Rubyist一样,我也是从学习Rails开始去了解Ruby的,在学习Rails之前,我正在使用JavaEE的SSH框架(struts+spring+hibernate), 当时也算是Jav

Ruby学习之对象模型

这两周工作内容较多,平时自己也有点不在状态,学的东西有点少了,趁着现在还有点状态,赶紧复习一下之前学习的Ruby吧. Ruby是我真正开始接触动态语言魅力的第一个语言,之前虽然也用过且一直用perl.python等脚本语言,但是只是作为unix shell的扩展(和工作有关),没有真正地审视动态语言的哲学.是<Ruby元编程>这本书,好像给我打开了一扇新世界的大门,书中介绍的每一个特性都让我兴奋地几乎跳起来,这就是学习的魅力吧. Ruby语言初探 由于是第一个Ruby的随笔,先简单介绍一下ru