Ruby中的数组和散列表的使用详解_ruby专题

Ruby的数组(arrays)和散列表(hashes)是被索引的收集(indexed collections).

两者都存储对象的集合,通过键(key)来访问。数组的键是整数。而散列表支持以任何对象作为它的键。数组和散列表会按需调整大小来保存新的元素。访问数组元素是高效的,但是散列表提供了灵活性。任何具体的数组或散列表可以保存不同类型的对象。

使用数组字面量(array literal)--即方括号之间放一组元素--可以创建和初始化新的数组对象。有了数组对象,在方括号之间提供索引便可以访问单个元素,如下例所示,注意Ruby数组的索引从零开始。

a=[1,'cat',3.14]     #有三个元素的数组

#访问第一个元素

a[0]  -> 1

#设置第三个元素

a[2] = nil

#显示这个数组

a ->[1,'cat',nil]

你可能已注意到在这个例子中使用了nil这个特别的值。许多语言中nil(或null)的概念是指“没有对象”。在Ruby中,这是不一样的;nil是一个对象,与别的对象一样,只不过它用来表示没有任何东西的对象。

有时候创建一组单词的数组是一件痛苦的事情--要处理许多引号和逗号。幸运的是,Ruby有一种快捷方式:%w 能够完成我们想做的事情。

a = ['ant','bee','cat','dog','elk']

a[0] -> "ant"

a[3] -> "dog"

#this is the same:

a = %w{ant bee cat dog elk}

a[0] -> "ant"

a[3] -> "dog"

Ruby的散列表与数组相似。散列表字面量(hash literal)使用花括号而不是方括号。这个字面量必须为每一项提供两个对象:一个键(key)和一个值(value)。

例如,你可能想将乐器映射到它们所属的交响乐章节,可以用散列表这么来做:

inst_section = {

'cello'   => 'string',

'clarinet' => 'woodwind',

'drum'  => 'percussion',

'oboe'   => 'woodwind',

'trumpet' => 'brass',

'violin'   => 'string'

}

=>的左边是键(key),右边是其对应的值(value)。在一个散列表里面,键必须是唯一的(不能有两个“drum”项)。散列表里面的键和值可以是任意对象--你可能会有这样的散列表,它的值是数组或别的散列表等。

散列表使用与数组相同的方括号表示法来进行索引。

inst_section['oboe']           -> "woodwind"

inst_section['cello']            -> "string"

inst_section['bassoon']         -> nil

正如上例所示,默认情况下,如果用一个散列表没有包含的键进行索引,散列表就返回nil。通常这样是很方便的,比如在条件表达式中nil就意味着false。而有时候你可能想改变这个默认动作。比如使用散列表来计算每个键出现的次数时,如果这个默认值是0的话就会很方便。这很容易做到:当创建一个新的空散列表时,可以指定一个默认值。

histogram = Hash.new(0)

histogram['key1']            ->0

histogram['key1'] = histogram['key1']+1

histogram['key1']            ->1

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数组
, 散列表
ruby
ruby gem命令详解、ruby 数组、ruby 数组操作、ruby 数组遍历、ruby 数组排序,以便于您获取更多的相关知识。

时间: 2024-09-16 10:07:06

Ruby中的数组和散列表的使用详解_ruby专题的相关文章

Ruby中执行Linux shell命令的六种方法详解_ruby专题

在Ruby中,执行shell命令是一件不奇怪的事情,Ruby提供了大概6种方法供开发者进行实现.这些方法都很简单,本文将具体介绍一下如何在Ruby脚本中进行调用终端命令. exec exec会将指定的命令替换掉当前进程中的操作,指定命令结束后,进程结束. 复制代码 代码如下: exec 'echo "hello world"' print 'abc' 执行上述的命令,结果如下,我们可以看到没有abc的输出,可以看出来,在执行echo "hello world"命令后

Ruby里4种比较函数(equal?, eql?, ==, ===)详解_ruby专题

Ruby里面有4种比较方法,equal?, eql?, ==, ===,而且在不同的类里面表现的很不一样.在使用的时候也特别容易搞糊涂. 这篇博文将演示一些代码来讲解各个方法. == - 类意义上的 相等,需要每个类自己定义实现 在特定类中觉得两个对象是否相同,需要看业务上的逻辑表象,所有由程序员覆盖该方法的定义,决定两个对象是否相同. 比如 String 类,他是来计较实际的文字串是否相同,而不在意是否来自同一个内存区域. >> a = "abc" #=> &quo

Ruby中XML格式数据处理库REXML的使用方法指南_ruby专题

以树方式使用 REXMLREXML 的目的是 正好够用.在最大程度上,它能很好地完成任务. 实际上, REXML 支持两种不同样式的 XML 处理 ― "树"和"流". 第一种样式是 DOM 所尝试要做的更简单的版本:第二种样式是 SAX 所尝试要做的更简单的版本. 让我们先研究树样式.假设我们要提取上一个示例中的同一个地址簿文档. 下面的示例来自我所创建的经修改的 eval.rb : 标准 eval.rb (链接到 Ruby 教程)可以根据对复杂对象的表达式求值显

在Ruby中处理XML和XSLT以及XPath的简单教程_ruby专题

什么是 XML ? XML 指可扩展标记语言(eXtensible Markup Language). 可扩展标记语言,标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言. 它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据. XML解析器结构和API XML的解析器主要有DOM和SAX两种.     SAX解析器是基于事件处理的,需要从头到尾把XML文档扫描一遍

ruby中的双等号==问题详解_ruby专题

前两天在写代码的时候,突然收到警告说项目代码中存在 XSS 漏洞,遂立即根据报告的 URL 排查页面代码,虽然很快就修复了,而且同样问题的讨论两年前就有了,一般来说相对有经验的同学也应该都知道这个点,但是还是觉得有必要写出来,再次提醒一下其他小伙伴,避免踩坑. 问题根源 其中,在找到的漏洞出现的地方,都存在类似以下这样的 slim 代码: input class='xxx' value==params[:account] 问题就出在双等号 == 上,因为在 slim 跟 ERB 模板(其他模板比

Ruby面向对象编程详解_ruby专题

Ruby是纯面向对象的语言,所有项目似乎要Ruby中为一个对象.Ruby中的每个值是一个对象,即使是最原始的东西:字符串,数字甚至true和false.即使是一个类本身是一个对象,它是Class类的一个实例.本章将通过所有功能涉及到Ruby的面向对象. 类是用来指定对象的形式,它结合了数据表示和方法操纵这些数据,转换成一个整齐的包.在一个类的数据和方法,被称为类的成员. Ruby类的定义: 定义一个类,定义的数据类型的草图. 这实际上并不定义任何数据,但它定义的类名字的意思什么,即是什么类的对象

ruby中self,作用域,可见性的用法详解

有些东西在任何时间任何地方表示的意思是不变的,比如整数,你看到的就是它表示的东西.关键词也一样,你不能使用 def,class 这些关键词作为变量名,所以当你看到它们的时候,你可以很容易知道它们是做什么的.不过还有很多东西的意思取决于它们所处的情境,也就是它们在不同的时间不同的地方的意思可能是会有变化的. self 表示的是当前或者默认的对象,在程序运行的时候每次它都会表示一个特定的对象.永远都只会有一个 self ,但是它表示的东西是会变的. 作用域(scope)的规则决定了变量的可见性.你要

实例讲解Ruby中的钩子方法及对方法调用添加钩子_ruby专题

钩子方法有些类似事件驱动装置,可以在特定的事件发生后执行特定的回调函数,这个回调函数就是钩子方法(更形象的描述: 钩子方法可以像钩子一样,勾住一个特定的事件.),在Rails中before\after函数就是最常见的钩子方法. Class#inherited方法也是这样一个钩子方法,当一个类被继承时,Ruby会调用该方法.默认情况下,Class#inherited什么都不做,但是通过继承,我们可以拦截该事件,对感兴趣的继承事件作出回应. class String def self.inherit

Ruby中的return、break、next详解_ruby专题

return,break,next 这几个关键字的使用都涉及到跳出作用域的问题,而他们的不同 则在于不同的关键字跳出去的目的作用域的不同,因为有代码块则导致有一些地方需要格外注意. return 常用方式 通常情况下的return语句和大家理解的意思是相同的. 复制代码 代码如下: def m1 param   if param == 1     return 'returned 1'   end 'returned default value'#根据Ruby语言规范,最后一条执行语句的结果将作