Ruby自学笔记(四)— 数组,Hash,正则表达式简介
今天学习的是数组和Hash,数组在很多编程语言中都能常常用到。
数组:
数组是存储数据的一种容器,在Ruby中,数组中存储的数据可以是任何类型的数据;这和JAVA不同,在JAVA中,数组是存储同一类型数据的结构。
1. 在Ruby中如何定义数组呢?
使用[ ]来框住元素,而元素之间则使用","间隔。如下,
name = ["Windy", "Cindy", "Amee", "Tom"] name = [] #声明了一个空数组,未定义的数组 name = [, "song", , "小林"]
2. 如何取得数组元素呢?
在Ruby通过 数组名[index] 来获取数组元素,这和JAVA是一样的。而且index序号是从0开始的。例如,在上面的例子中,想要取出"Windy"这个元素,则要使用name[0],而 p name[3] # -> "Tom"。
3. 如何将对象放入数组中呢?
可以直接通过给数组元素赋值
name = ["Alice", "John", "Bob", "Jessie"]
name[1] = "Jack" p name #-> ["Alice", "Jack", "Bob", "Jessie"] name[4] = "Windy"
p name #-> ["Alice", "Jack", "Bob", "Jessie", "Windy"]
4. 如何取得数组的大小?
使用size方法可以返回数组大小。例如,上面实例中第一次定义的数组name, p name.size # -> 4 在JAVA中,数组是有属性length来获取数组大小的。
5. 如何逐项处理数组中的内容?
可以使用数组的each方法来对数组中的内容逐项处理,语法如下:
=begin
语法:
数组。each { |变量|
要执行的动作
}
=end name = [2, 5, ,6, 9]
name.each{ |number|
prints number+1, "\n"
} # -> 3
#
#
#
这和JAVA中的for each循环类似。
HASH:
HASH是经常使用的容器之一,在Ruby中,其可以使用字符串等数据为key来存储对象,和JAVA中的Map容器很类似。
1. 如何定义HASH呢?
使用{ }将HASH对象都框住,而每个元素以key=>value的形式出现,而元素之间通过","间隔。
name_list = {"" => "Windy", "" => "Cindy", "" => "Terry"}
2. 如何取得HASH中的元素呢?
使用 HASH名称[key值] 来获取HASH元素,例如,
p name_list[""] # -> "Windy"
3. 如何将对象储存到HASH中?
和上面说到的数组类似,直接将值赋给HASH元素,例如: name_list["02"] = "Amy"
由于HASH没有固定的顺序,所以不能按照存储的顺序来取出数据,这和JAVA中的Hash Table很类似。
4. 如何逐项处理HASH内容
与数组类似,其也是通过它的each方法来逐项处理其元素
=begin
语法
HASH.each { |key变量,值变量|
想要执行的动作
}
=end name_list.each{ |key, value|
print key, " = ", value, "\n"
} # -> "01" = "Windy"
# "02" = "Cindy"
# "03" = "Terry"
Ruby还有重定向(redirect)的功能,就是把执行结果文件再存储到另外的文件中,使用">文件名"来实现,例如,ruby name_list.rb > name_list.txt
正则表达式:
在其他编程语言中,也都有正则表达式。在Ruby中,使用如下语法:/样式/ =~ 想要匹配的字符串
如果匹配成功,则返回匹配成功的位置,位置是从0开始计算的;如果匹配不成功,则返回nil。若/样式/i,即多加了一个i,则匹配时就不区分大小写了。
p /Ruby/ =~ "Another Ruby Hacker" #-> 8
p /Another Ruby Hacker/ =~ "Ruby" #-> nil p /Ruby/ =~ "ruby" #-> nil
p /Ruby/i =~ "ruby" #-> 0
样式也可以通过Regexp类的new方法来构造,例如,pattern = Regexp.new(参数)
Ruby自学笔记(四)— 数组,Hash,正则表达式简介的更多相关文章
- Ruby自学笔记(五)— 条件判断
条件判断,在编程语言中都存在,而Ruby中的条件判断和Java中类似,当然还是存在些许差别 Ruby中条件判断的条件: 1) 可以使用 ==,<,>等比较运算来作为条件,比较运算可以返回t ...
- Ruby自学笔记(三)— 方法Method
Ruby做为面向对象语言,肯定要对对象进行相关的操作,这时候就涉及到方法了. 调用方法 - 对象.方法名(实参1,实参2,...,实参n) 方法的分类: 1. 实例方法:顾名思义,就是由实例来调用的方 ...
- Ruby自学笔记(二)— Ruby的一些基础知识
Ruby安装好之后,我们就可以来实践Ruby语言了. 以下是一些学习到的简单基础知识: 1. 如何执行Ruby文件? 我们编写的Ruby文件是以rb为后缀名的,例如:XXX.rb.当要执行ruby文件 ...
- Ruby自学笔记(一)— 基本概况
之前一直想要多看看RESTful Service相关的东西,找到一本相关的书,但是里面的代码都是用Ruby写的,虽然知道编程语言都是类似的,但是看到一些陌生的语法,还是有些摸不着头脑,所以最近终于下定 ...
- JS学习笔记 (四) 数组进阶
1.基本知识 1.数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中的位置称为索引,以数字表示,以0开始. 2.数组是无类型的.数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的 ...
- Ruby自学笔记(六)— 循环
循环结构在编程语言中是不可或缺的,所以Ruby中的循环也有其自定义的规则. 而我们关注循环结构,要知道两个因素:1) 循环的条件:2) 循环执行的内容 Ruby有一些方式来实现循环结构体: 1. ti ...
- webpack4 自学笔记四(style-loader)
全部的代码及笔记都可以在我的github上查看, 欢迎star:https://github.com/Jasonwang911/webpackStudyInit/tree/master/css 引入- ...
- spring boot 自学笔记(四) Redis集成—Jedis
上一篇笔记Reddis集成,操作Redis使用的是RedisTemplate,但实际中还是有一大部分人习惯使用JedisPool和Jedis来操作Redis, 下面使用Jedis集成示例. 修改Red ...
- Objective-C 学习笔记(四) 数组
Objective-C 数组作为函数参数传递 如果想在一个函数作为参数,通过一维数组,就必须声明函数形式参数 方式一 指针作为形式参数 - (void) myFunction(int *) pa ...
随机推荐
- c#基础语言编程-常用函数
类型转换Convert Convert考虑数据意义的转换. Convert是一个加工.改造的过程.在使用Convert的转换过程中不会返回异常,当遇到类型转换的不知道的时候,用Convert找找. T ...
- Nunit中文文档
NUnit中文文档:http://www.36sign.com/nunit 关于特性的使用:http://www.36sign.com/nunit/attributes.html
- Delphi 颜色转换
http://files.cnblogs.com/xe2011/StringToColor.rar unit Unit1; interface uses Windows, Messages, SysU ...
- [TypeScript] Understanding Generics with RxJS
Libraries such as RxJS use generics heavily in their definition files to describe how types flow thr ...
- Android 自定义Spinner和其下拉窗口
: 自定义Spinner其实包括两个部分: 第一部分是用来打开下拉列表的按钮,如图,这个绿色背景直接设置Spinner的背景就行,素材文件如下: 里面的文字需要注意下,Spinner控件没有直接修改文 ...
- /proc/sysrq-trigger
立即重启计算机 echo "b" > /proc/sysrq-trigger 立即关闭计算机 echo "o" > /proc/ ...
- iOS-Storyboad动态刷新
iOS-Storyboad动态刷新 什么叫做Storyboard动态刷新 在项目开发中,如果可以在xib(storyboard)中,动态显示运行效果图,那么实在是太爽了.在Xcode 6之后就为我们提 ...
- [转] 让ctags支持Javascript
mac下安装exuberant ctags mac 下自带ctags但是功能有限,要使用一些常用的功能需要安装exuberant ctags 下载exuberant ctags 安装exuberant ...
- 关于promise
后来发现promise是解决异步的一个链式调用的好的方法,避免了所谓的回调的监狱, 它有三个状态,未作为,已经完成和已经失败,起始是未作为,然后有了动作总会有个结果, 分成resolve,已经顺利ok ...
- hibernate通过判断参数动态组合Hql语句,生成基本通用查询
// public List find(Station entity) { List reuslt = null; // 字符串辅助类 StringBuffer hql = new StringBuf ...