ch02 便利的对象

不同数据间的组合无法用字符串或数值这样简单的对象来表示,因此我们需要一个可以用以表示数据集合的数据结构

本章介绍:

  1. 数组散列这两种新的数据结构
  2. 处理字符串时常用的工具——正则表达式

「 数组、散列 这样保存对象的对象,我们称为容器。 」

2.1 数组

2.1.1 数组的创建

数组(array)是一个按顺序保存多个对象的对象,它是基本容器之一。
我们一般称为数组对象或者Array对象。

一个简单的数组:

1
names = [ "小林","林","高野","森冈" ]

2.1.2 数组对象

空数组对象:(还有其他方式创建数组,之后会继续介绍)

1
names = []

2.1.3 从数组中抽取对象

抽取方法:

数组名[索引]

1
2
3
names = [ "小林","林","高野","森冈" ]
name[0] # 这种方式可以取出第一个元素
print("第一个名字为:", names[0],".\n") # 结果为 第一个名字为:小林

执行示例:

「 数组的索引值是从0开始 」,并非1. 因此 names[1] 不是数组第一个元素,而是第二个元素。

2.1.4 将对象保存在数组中

names[0] = “野尻”

上图可以看出 数组第一个元素 从 “小林” 变成了 “野尻”。

如果想添加额外的元素,可以继续添加之后的索引
如图:

2.1.5 数组的元素

任何对象都可以作为数组元素保存到数组中。

如:

1
2
3
num = [2, 1, 3, 5, 9]
mixed = [2, "哥", 3, "你", 9]

2.1.6 数组的大小

1
array.size

如图:

2.1.6 数组的循环

each 方法的语法如下:

数组.each do |变量|
希望循环做的处理 (这里称为块 block)
end

(解说:块的开始部分为|变量|,each方法会把数组元素逐个拿出来,赋值给指定的 |变量|,那么块里面的方法就可以通过访问该变量,实现循环遍历数组的操作。)

本图是原文中的,更加清晰点。

每循环一次,就会把当前的数组元素赋值给变量 n ,

2.2 散列

散列(hash)也是一个程序里常用到的容器
散列键值对key-value pair)的一种数据结构
Ruby中,一般以字符串或者符号(Symbol)作为键(key),来保存对应的对象(value)。

2.2.1 什么是符号

如图:

1
2
sym = :foo # 表示符号":foo"
sym2 = :"foo" # 意思同上

符号能实现的功能,大部分字符串也能实现。
但是判断 「 是否相等 」的处理中,使用符号更有效率

符号与字符串可以相互转换

符号使用 to_s 可以 转成为 字符串。
字符串使用 to_sym 可以 转换为 符号。

2.2.2 散列的创建

使用{}创建,使用 => 定义key和value ;

如:

1
address = { :name => "高桥" , :pinin => "gaoqiao", :postal => "123123" }

当键是符号时,可以写成下面这样

1
address = { name: "高桥" , pinin: "gaoqiao", postal: "123123" }

2.2.3 散列的使用

从散列里取出对象(value):

散列名[键]

保存对象时使用的方法:

散列名[键] = 希望保存的对象

2.2.4 散列的循环

散列的 each 语法:

散列.each do |键变量, 值变量|
希望循环做的处理
end

如图:

2.3 正则表达式 (Regular expression)

使用正则表达式可以非常简单的实现以下功能:

  • 将字符串与模式(pattern)相匹配
  • 使用模式分割字符串

模式与匹配

正则表达式的语法如下:

/模式/

如:/Ruby/ 就这样 把希望匹配的内容直接写出来。

匹配正则表达式与字符串的方法是:

/模式/ =~ 希望匹配的字符串

若匹配成功,则返回匹配部分的位置。(字符和数组的索引一样,都是从0开始计数。所以字符串的首个字符位置为0)。
若匹配失败,则返回 nil。

如图:

/Ruby/i 加个 i 表示不区分大小写。
如图:

nil 是什么?

nil 是一个特殊的值,表示对象不存在。
像在正则表达式中表示无法匹配成功一样,方法不能返回有意义的值时就会返回 nil 。数组或者散列里获取对象时,若指定不存在的索引或键时,得到的返回值也是 nil

如图:

if 语句 和 while 语句在判断条件时,如果碰到 false 和 nil ,都会认为是 「 假 」,除此以外都认为是 「 真 」。因此,除了可以使用返回值为 true 或者 false 的方法,还可以使用 「 返回某个值 」 或者返回 「 nil 」的方法作为判断条件表达式

如图:

执行示例: