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,数组,散列表
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]