`
wangsuting
  • 浏览: 29818 次
社区版块
存档分类
最新评论

ruby 中的处理数组函数与Hash

阅读更多
>>  "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!"

分享到:
评论

相关推荐

    ruby中文 文档

    6. **哈希(Hash)**:Ruby的哈希是一种关联数组,键值对的存储方式,文档会介绍如何创建和操作哈希。 7. **正则表达式(Regexp)**:Ruby内置了强大的正则表达式支持,用于文本匹配和处理。 8. **文件和I/O操作**...

    Ruby语言中文教程

    通过这个中文教程,你将掌握Ruby语言的基础知识,包括语法、对象系统、控制结构、数据结构、类和模块、异常处理、方法与闭包以及元编程。同时,了解Ruby的生态系统,能够利用Gem管理和使用社区的资源,提升开发效率...

    ruby中文教程(源代码)

    - 函数与方法:Ruby中的函数被称为方法,可以定义在类或模块中,支持块(block)和 Proc 对象。 2. **面向对象编程(OOP)** - 类与对象:Ruby是纯面向对象的语言,一切皆对象。你可以创建自定义类来封装数据和...

    learning-ruby.

    3. **函数与方法**:Ruby中的函数称为方法,可以定义全局方法或类方法。了解如何定义、调用和传递参数是学习Ruby的重要部分。 4. **面向对象编程**:Ruby是一种纯面向对象的语言,每个值都是一个对象,每种类型都是...

    Ruby自学笔记

    具体操作时,使用星号(*)操作符配合Hash构造函数可以实现数组到Hash的转换。 在Ruby的方法中,如果方法名末尾带有感叹号(!),表示该方法会改变原有对象的值,相反,如果不带有感叹号,则会创建一个新的对象进行返回...

    Ruby常见面试题.pdf

    Ruby中的数组(Array)和哈希(Hash)有什么区别?请说明在Ruby中数组和哈希的不同特点。 **数组**是有序的元素集合,可以通过索引访问;**哈希**是键值对的无序集合,通过键来访问对应的值。 **示例**: ```ruby...

    在Ruby中创建和使用哈希的教程

    在Ruby编程语言中,哈希(Hash)是一种特殊的数据结构,用于存储键值对(key-value pairs)。在本教程中,我们将详细介绍如何在Ruby中创建和使用哈希,罗列各种方法和技巧,并解释哈希的特性。 ### 理解哈希的基本...

    ruby初级中文教程与实例

    4. 函数和方法:Ruby中的函数定义使用`def`关键字,可以接受参数并返回值。方法是Ruby的核心特性,它们允许代码重用和模块化。 二、面向对象编程 1. 类和对象:Ruby是面向对象的语言,所有的一切都是对象。类用于...

    ruby2.1.6安装文件

    6. **数组和哈希的改进**:这一版本中,数组和哈希的创建与操作得到了优化,如`Array#bsearch`和`Hash#slice`等方法的添加,使得数据操作更加便捷。 7. **Ruby调试器改进**:内置的调试工具如`pry`和`byebug`在Ruby...

    Ruby - Ruby for Rails

    - **异常处理**:探讨 Ruby 中的异常处理机制,包括 raise 和 rescue 关键字的使用。 - **递归函数**:学习如何使用递归函数解决复杂问题。 ### 三、内置类和模块 #### 3.1 内置必需类 - **基本数据类型**:介绍 ...

    Ruby不完全读书指南.rar

    Ruby的集合类型包括数组(Array)、哈希(Hash)、范围(Range)和集合(Set)。数组是有序的元素序列,哈希则是一组键值对,提供了基于键的访问。范围表示一个连续的数值序列,集合则不包含重复元素。 Ruby的标准...

    精华ruby学习笔记和代码

    这个笔记里包含了ruby的整型,字符串,浮点数,布尔等基础数据类型,还有数组,哈希hash的用法, 类的定义,函数方法,以及对象定义,其他高级用法解释,除了笔记记录的语法糖之外,还包含了一些解释性的代码,帮助...

    RUBY入门教程,新手人们

    7. 集合和数组:Ruby内置了数组(Array)和哈希(Hash)两种主要的数据结构,它们提供了丰富的操作方法,如查找、排序、合并等。 8. 元编程:Ruby的强大之处在于其元编程能力,你可以动态地修改类和对象的行为,...

    Ruby编程Ruby Programming

    根据提供的文件信息,我们将深入探讨与“Ruby编程Ruby Programming”这一主题相关的几个核心知识点。这本面向初学者和高级读者的指南旨在全面介绍Ruby编程语言的基础及其高级特性,因此我们将从多个角度来解析这些...

    Ruby中文教程。。。

    4. 函数与方法:Ruby中函数被称为方法,可以定义在类或模块中,也可以作为独立的块存在。如`def add(a, b)`定义一个名为add的方法,接受两个参数a和b。 二、面向对象编程 1. 类与对象:Ruby是纯面向对象的语言,...

    Ruby编程语言算法集

    `检查元素是否存在于数组中,`Hash#key?`则检查键是否存在哈希中。 Ruby的Gem库是其强大的扩展机制,其中包含了大量的算法实现,如计算几何、图论、数值分析等。例如,`NMatrix` gem 提供了高效的矩阵运算,适合...

    ruby-2.7.1.zip

    Ruby 2.7.1对语法也进行了一些改进,例如弃用了`Hash#default`方法的旧用法,鼓励使用`Hash#default_proc`,后者提供了更灵活的默认值处理方式。此外,`Array#bsearch`方法现在支持`&`运算符,使得在数组中查找指定...

Global site tag (gtag.js) - Google Analytics