关于数组

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)的更多相关文章

  1. Ruby的语法糖

    发现Ruby的语法糖好多,比如函数调用,参数列表可以写括号和不写括号.代码块可以用do end 或者 {}.   还有 if,unless后置.等等. 如果看Ruby代码看多了,你会发现,它很多地方的 ...

  2. Ruby基本语法规则

    1.Ruby常用数据类型 Numbers, Strings, Booleans my_num = 25 my_boollean = true (or false) my_string = " ...

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

    1. 调试&注释&打印输出 1.1 调试 ruby属于解释型语言,即脚本,在linux上,脚本的执行无非三种: 1. 用解释器运行脚本 解释器 脚本文件 即:ruby  脚本文件 2. ...

  4. ruby基础语法

    首发:个人博客,更新&纠错&回复 学不同语言,常将它们的基础语法搞混,例如if后面有没有(),后面是then还是:还是{,结尾是end还是}. 这种事情毫无技术含量又毫无乐趣可言,但极 ...

  5. Ruby基本语法

    更新: 2017/06/09 更新: 2017/06/20 cattr_accessor定义类变量,相当于@@ 更新: 2017/06/23 生成类的实例 更新: 2017/06/24 补充loop的 ...

  6. ruby基本语法(1)

    一些学习资源 http://www.codecademy.com/zh/courses/ruby-beginner-en-d1Ylq/0/5?curriculum_id=5059f8619189a50 ...

  7. 关于Ruby常用语法案例累积

    变量问题: 类变量和方法变量的区别是什么? 类变量:可以直接使用 方法变量:需要实例化后,才能使用该变量 案例一: class Person @@name = "Tom" @@na ...

  8. 2.ruby基本语法,类的定义

    1.在ruby中的定义class,ruby中定义类也是以关键字class开头 后面带着类名,类名以大写开头.一个类的结束以关键字end 结束.如: class Customer end 2.ruby类 ...

  9. ruby puts语法

    str = "Welcom to china" str1 = str puts str + " 1" puts str1 + " 1" de ...

随机推荐

  1. HTML5-video(播放暂停视频;打开关闭声音;进度条)

    <!DOCTYPE html> <html> <head> <title>HTML5-video(播放暂停视频:打开关闭声音:进度条)</titl ...

  2. Python2/3 安装各类包的教程

    1.pycryptodome(pyCrypto) pyCrypto包已经失效了,需要替换为pycryptodome 有SSR直接 pip install pycryptodome 国内用 pip in ...

  3. V8引擎回收机制、 内存泄露

     一.垃圾回收:将内存不在使用的数据进行清理,释放内存空间   v8将内存分为新生代空间和老生代的空间   新生代空间:用于存活较短的对象   :又分为二个空间:from空间和to空间   :Scav ...

  4. ORA-00911: invalid character 错误解决

    多数情况如下: 控制面板--系统和安全---系统--高级系统设置--高级--环境变量--系统变量中 变量名:NLS_LANG 变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK ...

  5. Git的基本操作命令

    Git的基本命令 ## Git命令行 ### 查看配置 ```d git config user.name //查看用户名 git config user.email //查看邮箱 ``` ### 全 ...

  6. 2018-10-2-win10-uwp-win2d-特效

    title author date CreateTime categories win10 uwp win2d 特效 lindexi 2018-10-02 21:20:46 +0800 2018-6- ...

  7. idea import class的快捷键

    有自动import class的快捷键 设置如下: 1.alt+enter 2.写好代码之后ctrl+alt+l格式化代码,优化导入包   1.alt+enter 2.写好代码之后ctrl+alt+l ...

  8. set unused

    使用 set unused 选项标记不再使用的列 使用 drop unsused columns 丢弃标记为unused的列 alter table tabName set unused column ...

  9. python struct中的pack unpack

    python struct中的pack unpack pytyon tuple元组 print struct.unpack("!ihb", buffer)  结果为7 //pyth ...

  10. pandas数据查询(数值、列表、区间、条件、函数)

    import pandas as pd # 0 读取数据 df = pd.read_csv("文件路径")#例子是北京一年的天气情况 df.head()#查看表头 # 设定索引为日 ...