不同数据间的组合无法用字符串或数值这样简单的对象来表示,因此我们需要一个可以用以表示数据集合的数据结构。
本章介绍:
- 数组和散列这两种新的数据结构。
- 处理字符串时常用的工具——正则表达式。
「 数组、散列 这样保存对象的对象,我们称为容器。 」
2.1 数组
2.1.1 数组的创建
数组(array)是一个按顺序保存多个对象的对象,它是基本容器之一。
我们一般称为数组对象或者Array对象。
一个简单的数组:
|
|
2.1.2 数组对象
空数组对象:(还有其他方式创建数组,之后会继续介绍)
|
|
2.1.3 从数组中抽取对象
抽取方法:
数组名[索引]
|
|
执行示例:
「 数组的索引值是从0开始 」,并非1. 因此 names[1]
不是数组第一个元素,而是第二个元素。
2.1.4 将对象保存在数组中
names[0] = “野尻”
上图可以看出 数组第一个元素 从 “小林” 变成了 “野尻”。
如果想添加额外的元素,可以继续添加之后的索引
如图:
2.1.5 数组的元素
任何对象都可以作为数组元素保存到数组中。
如:
|
|
2.1.6 数组的大小
|
|
如图:
2.1.6 数组的循环
each 方法的语法如下:
数组.each do |变量|
希望循环做的处理 (这里称为块 block)
end
(解说:块的开始部分为|变量|,each方法会把数组元素逐个拿出来,赋值给指定的 |变量|,那么块里面的方法就可以通过访问该变量,实现循环遍历数组的操作。)
本图是原文中的,更加清晰点。
每循环一次,就会把当前的数组元素赋值给变量 n ,
2.2 散列
散列(hash)也是一个程序里常用到的容器。
散列是键值对(key-value pair)的一种数据结构。
Ruby中,一般以字符串或者符号(Symbol)作为键(key),来保存对应的对象(value)。
2.2.1 什么是符号
如图:
|
|
符号能实现的功能,大部分字符串也能实现。
但是判断 「 是否相等 」的处理中,使用符号更有效率。
符号与字符串可以相互转换。
符号使用 to_s
可以 转成为 字符串。
字符串使用 to_sym
可以 转换为 符号。
2.2.2 散列的创建
使用{}创建,使用 => 定义key和value ;
如:
|
|
当键是符号时,可以写成下面这样
|
|
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 」的方法作为判断条件表达式。
如图:
执行示例: