>> "foo bar baz".split # 把字符串分割成有三个元素的数组 => ["foo", "bar", "baz"]
默认情况下,split 在空格处把字符串分割成数组,可带参数:
>> "fooxbarxbazx".split('x') => ["foo", "bar", "baz"]
>> a = [42, 8, 17] >> a.first => 42 >> a.second => 8 >> a.last => 17 >> a.last == a[-1] => true >> a.sort #排序 => [8, 17, 42] >> a.reverse #逆序 => [17, 8, 42] >> a.shuffle #乱序 => [17, 42, 8] >> a => [42, 8, 17]
注意,上面的方法都没有修改 a 的值。如果你想修改数组的值要使用对应的“bang”方法(之所以这么叫是因为这里的感叹号经常都读作“bang”):
>> a => [42, 8, 17] >> a.sort! => [8, 17, 42] >> a => [8, 17, 42]
push 方法可以向数组中添加元素,或者使用等价的 << 操作符,Ruby 不像很多其他的语言,数组可以包含不同类型的数据:
>> a.push(6) # 把 6 加到数组结尾 => [42, 8, 17, 6] >> a << 7 # 把 7 加到数组结尾 => [42, 8, 17, 6, 7] >> a << "foo" << "bar" # 串联操作 => [42, 8, 17, 6, 7, "foo", "bar"]
前面我们用 split 把字符串分割成字符串,我们还可以使用 join 方法进行相反的操作:
>> a => [42, 8, 17, 7, "foo", "bar"] >> a.join # 没有连接符 => "428177foobar" >> a.join(', ') # 连接符是一个逗号和空格 => "42, 8, 17, 7, foo, bar"
和数组有点类似的是 Range,使用 to_a 方法把它转换成数组或许更好理解:
>> 0..9 => 0..9 >> 0..9.to_a # 错了,to_a 在 9 上调用了 NoMethodError: undefined method `to_a\' for 9:Fixnum >> (0..9).to_a # 调用 to_a 要用括号包住 Range => [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Range 经常被用来获取一组数组元素:
>> a = %w[foo bar baz quux] #%w 创建一个元素为字符串的数组 => ["foo", "bar", "baz", "quux"] >> a[0..2] => ["foo", "bar", "baz"]
Range 也可使用字母:
>> ('a'..'e').to_a => ["a", "b", "c", "d", "e"]
map方法,map 方法返回的是在数组或 Range 的每个元素上执行块中代码后的结果。
3.times { puts "Betelgeuse!" } # 3.times 后跟的块没有变量 "Betelgeuse!" "Betelgeuse!" "Betelgeuse!" => 3 >> (1..5).map { |i| i**2 } # ** 表示幂 => [1, 4, 9, 16, 25] >> %w[a b c] #%w 可以创建元素为字符串的数组 => ["a", "b", "c"] >> %w[a b c].map { |char| char.upcase } => ["A", "B", "C"] >> %w[A B C].map { |char| char.downcase } => ["a", "b", "c"]
Hash 通过一对花括号中包含一些键值对的形式表示,Hash 的元素没有特定的顺序。8 如果顺序很重要的话就要使用数组了。
目前为止我们的键用的都是字符串,但在 Rails 中用 Symbol 当键却很常见。Symbol 看起来像字符串,只不过没有包含在一对引号中,而是在前面加一个冒号。例如,:name 就是一个 Symbol。可以把 Symbol 看成没有约束的字符串:
>> "name".split('') => ["n", "a", "m", "e"] >> :name.split('') NoMethodError: undefined method `split' for :name:Symbol >> "foobar".reverse => "raboof" >> :foobar.reverse NoMethodError: undefined method `reverse' for :foobar:Symbol
Symbol当键的两种形式
{ :name => "Michael Hartl", :email => "michael@example.com" } { name: "Michael Hartl", email: "michael@example.com" }
inspect 方法,因为使用 inspect 输出对象的方式经常使用,为此还有一个专门的快捷方式,p 方法:
>> puts (1..5).to_a # 把数组作为字符串输出 1 2 3 4 5 >> puts (1..5).to_a.inspect # 输出一个数组字面量形式 [1, 2, 3, 4, 5] >> puts :name, :name.inspect name :name >> puts "It worked!", "It worked!".inspect It worked! "It worked!"
发表评论
-
rails download files by post request
2016-07-04 14:34 415刚做了一个下载文件,用的是get请求 1.先说用get请 ... -
ruby中类的层级关系
2014-09-03 23:02 647所有的类最终继承于Object,Object本身又继承于 ... -
ruby中的对象包含什么
2014-09-02 22:21 495class MyClass def my_metho ... -
activerecord 中查询created_at在一定时间段内
2014-08-20 22:07 767今天遇到一个问题,需要取出数据库中本月的一些记录。 查了 ... -
guanzhuweobo
2014-01-17 17:10 0为了得到一个由所有被关注用户组成的 followed_user ... -
weibiweibi
2014-01-16 15:31 810.1.3 用户和微博之间的关联 在为 Web 程序构建数 ... -
管理员权限
2014-01-16 14:16 0我们要通过 User 模型中一个名为 admin 的属性来判断 ... -
利用faker创建示例用户
2014-01-16 13:51 0之前做过一个ruby_on_rails的教程,其中实现用户管理 ... -
转向用户真正相撞向的页面
2014-01-16 11:15 0要转向用户真正想访问的页面,我们要在某个地方存储这个页面的地址 ... -
添加头像
2014-01-15 15:01 0首先,我们要在用户资料页面中添加一个“全球通用识别”的头像,这 ... -
唯一性验证
2014-01-15 12:55 0为 email 列建立索引就要改变数据库模型,在 Rails ... -
用image_tag添加图片
2014-01-14 17:25 0在rails工程中添加图片: = link_to image_ ... -
定义 full_title 帮助方法
2013-12-31 10:08 0module ApplicationHelper # ... -
对数据操作的一些函数
2013-12-30 15:17 0Model.take检索的记录,没 ... -
用has_secure_password对密码进行加密
2013-12-28 19:19 2258运行环境: rails 4.0.0 rub ... -
rails中用validates进行合法性验证
2013-12-28 19:33 2051活动通中注册信息的验 ... -
rails的三种生产环境
2013-12-28 18:29 966Rails 定义了三个环境,分别是“生产环境”、“开发环境”和 ... -
rails中路由的配置
2013-12-24 18:18 01.典型路由: match '/:controller' m ... -
render与redirect_to页面显示
2013-12-28 18:21 4801.redirect_to要向服务器重新发送请求,示例代码如下 ... -
rails中用link_to用法
2013-12-22 16:17 2521rails中的link_to就相当于h ...
相关推荐
6. **哈希(Hash)**:Ruby的哈希是一种关联数组,键值对的存储方式,文档会介绍如何创建和操作哈希。 7. **正则表达式(Regexp)**:Ruby内置了强大的正则表达式支持,用于文本匹配和处理。 8. **文件和I/O操作**...
通过这个中文教程,你将掌握Ruby语言的基础知识,包括语法、对象系统、控制结构、数据结构、类和模块、异常处理、方法与闭包以及元编程。同时,了解Ruby的生态系统,能够利用Gem管理和使用社区的资源,提升开发效率...
- 函数与方法:Ruby中的函数被称为方法,可以定义在类或模块中,支持块(block)和 Proc 对象。 2. **面向对象编程(OOP)** - 类与对象:Ruby是纯面向对象的语言,一切皆对象。你可以创建自定义类来封装数据和...
3. **函数与方法**:Ruby中的函数称为方法,可以定义全局方法或类方法。了解如何定义、调用和传递参数是学习Ruby的重要部分。 4. **面向对象编程**:Ruby是一种纯面向对象的语言,每个值都是一个对象,每种类型都是...
具体操作时,使用星号(*)操作符配合Hash构造函数可以实现数组到Hash的转换。 在Ruby的方法中,如果方法名末尾带有感叹号(!),表示该方法会改变原有对象的值,相反,如果不带有感叹号,则会创建一个新的对象进行返回...
Ruby中的数组(Array)和哈希(Hash)有什么区别?请说明在Ruby中数组和哈希的不同特点。 **数组**是有序的元素集合,可以通过索引访问;**哈希**是键值对的无序集合,通过键来访问对应的值。 **示例**: ```ruby...
在Ruby编程语言中,哈希(Hash)是一种特殊的数据结构,用于存储键值对(key-value pairs)。在本教程中,我们将详细介绍如何在Ruby中创建和使用哈希,罗列各种方法和技巧,并解释哈希的特性。 ### 理解哈希的基本...
4. 函数和方法:Ruby中的函数定义使用`def`关键字,可以接受参数并返回值。方法是Ruby的核心特性,它们允许代码重用和模块化。 二、面向对象编程 1. 类和对象:Ruby是面向对象的语言,所有的一切都是对象。类用于...
6. **数组和哈希的改进**:这一版本中,数组和哈希的创建与操作得到了优化,如`Array#bsearch`和`Hash#slice`等方法的添加,使得数据操作更加便捷。 7. **Ruby调试器改进**:内置的调试工具如`pry`和`byebug`在Ruby...
- **异常处理**:探讨 Ruby 中的异常处理机制,包括 raise 和 rescue 关键字的使用。 - **递归函数**:学习如何使用递归函数解决复杂问题。 ### 三、内置类和模块 #### 3.1 内置必需类 - **基本数据类型**:介绍 ...
Ruby的集合类型包括数组(Array)、哈希(Hash)、范围(Range)和集合(Set)。数组是有序的元素序列,哈希则是一组键值对,提供了基于键的访问。范围表示一个连续的数值序列,集合则不包含重复元素。 Ruby的标准...
这个笔记里包含了ruby的整型,字符串,浮点数,布尔等基础数据类型,还有数组,哈希hash的用法, 类的定义,函数方法,以及对象定义,其他高级用法解释,除了笔记记录的语法糖之外,还包含了一些解释性的代码,帮助...
7. 集合和数组:Ruby内置了数组(Array)和哈希(Hash)两种主要的数据结构,它们提供了丰富的操作方法,如查找、排序、合并等。 8. 元编程:Ruby的强大之处在于其元编程能力,你可以动态地修改类和对象的行为,...
根据提供的文件信息,我们将深入探讨与“Ruby编程Ruby Programming”这一主题相关的几个核心知识点。这本面向初学者和高级读者的指南旨在全面介绍Ruby编程语言的基础及其高级特性,因此我们将从多个角度来解析这些...
4. 函数与方法:Ruby中函数被称为方法,可以定义在类或模块中,也可以作为独立的块存在。如`def add(a, b)`定义一个名为add的方法,接受两个参数a和b。 二、面向对象编程 1. 类与对象:Ruby是纯面向对象的语言,...
`检查元素是否存在于数组中,`Hash#key?`则检查键是否存在哈希中。 Ruby的Gem库是其强大的扩展机制,其中包含了大量的算法实现,如计算几何、图论、数值分析等。例如,`NMatrix` gem 提供了高效的矩阵运算,适合...
Ruby 2.7.1对语法也进行了一些改进,例如弃用了`Hash#default`方法的旧用法,鼓励使用`Hash#default_proc`,后者提供了更灵活的默认值处理方式。此外,`Array#bsearch`方法现在支持`&`运算符,使得在数组中查找指定...