站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
Ruby-容器
”(章节)
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
高级
特殊字符
帮助
标题
2级
3级
4级
5级
格式
插入
拉丁字母
扩展拉丁字母
国际音标
符号
希腊字母
希腊字母扩展
西里尔字母
阿拉伯字母
扩展阿拉伯字母
希伯来字母
孟加拉语字符集
泰米尔数字和符号
泰卢固语字符集
僧伽罗语字符集
梵文字符集
古吉拉特语字符集
泰语字符集
老挝语
高棉语字母
加拿大原住民音节文字
卢恩
Á
á
À
à
Â
â
Ä
ä
Ã
ã
Ǎ
ǎ
Ā
ā
Ă
ă
Ą
ą
Å
å
Ć
ć
Ĉ
ĉ
Ç
ç
Č
č
Ċ
ċ
Đ
đ
Ď
ď
É
é
È
è
Ê
ê
Ë
ë
Ě
ě
Ē
ē
Ĕ
ĕ
Ė
ė
Ę
ę
Ĝ
ĝ
Ģ
ģ
Ğ
ğ
Ġ
ġ
Ĥ
ĥ
Ħ
ħ
Í
í
Ì
ì
Î
î
Ï
ï
Ĩ
ĩ
Ǐ
ǐ
Ī
ī
Ĭ
ĭ
İ
ı
Į
į
Ĵ
ĵ
Ķ
ķ
Ĺ
ĺ
Ļ
ļ
Ľ
ľ
Ł
ł
Ń
ń
Ñ
ñ
Ņ
ņ
Ň
ň
Ó
ó
Ò
ò
Ô
ô
Ö
ö
Õ
õ
Ǒ
ǒ
Ō
ō
Ŏ
ŏ
Ǫ
ǫ
Ő
ő
Ŕ
ŕ
Ŗ
ŗ
Ř
ř
Ś
ś
Ŝ
ŝ
Ş
ş
Š
š
Ș
ș
Ț
ț
Ť
ť
Ú
ú
Ù
ù
Û
û
Ü
ü
Ũ
ũ
Ů
ů
Ǔ
ǔ
Ū
ū
ǖ
ǘ
ǚ
ǜ
Ŭ
ŭ
Ų
ų
Ű
ű
Ŵ
ŵ
Ý
ý
Ŷ
ŷ
Ÿ
ÿ
Ȳ
ȳ
Ź
ź
Ž
ž
Ż
ż
Æ
æ
Ǣ
ǣ
Ø
ø
Œ
œ
ß
Ð
ð
Þ
þ
Ə
ə
格式
链接
标题
列表
文件
参考
讨论
说明
输入内容
输出结果
斜体
''斜体文字''
斜体文字
粗体
'''粗体文字'''
粗体文字
粗斜体
'''''粗斜体文字'''''
粗斜体文字
== 哈希 == 哈希(有时被认为是数组和字典的结合)和数组一样是用来储存对象引用的集合。<br> 不过,区别于通过整数来索引数组,你可以通过任意类型的对象来索引哈希:字符、正则表达式等。在哈希中保存元素实际上是保存了两个对象----键和值。用键可以索引到对应的值。哈希中的值可以是任意类型的对象,下面的例子使用了哈希字面值:括号括起来的键值对。<br> h = { 'dog' => 'canine', 'cat' => 'feline', 'donkey' => 'asinine' } <br> h.length >> 3 <br> h['dog'] >> "canine" <br> h['cow'] = 'bovine' <br> h[12] = 'dodecine' <br> h['cat'] = 99 <br> h >> {"donkey"=>"asinine", "cow"=>"bovine", "dog"=>"canine", 12=>"dodecine", "cat"=>99} <br> 对比于数组,哈希有一个显见的好处就是可以使用任意对象做索引,但同时一个显见的不好处就是它的元素是无序的,所以你不能简单地把哈希用作堆栈或者队列。<br> 你很快会发现哈希是ruby中使用最广泛的一类数据结构。317页有完整的哈希类中实现的方法列表。<br> 实现一个SongList容器<br> 上面简单讨论了一下数组和哈希,下面我们来实现点唱机的SongList类。我们先列出在SongList中所需的基本的方法的一个列表,我们希望随着我们的进度不断丰富它,现在先把它做出来。<br> append( aSong ) >> list <br> 向列表中添加指定的歌曲<br> deleteFirst() >> aSong <br> 从列表中删除第一首歌曲并返回该歌曲<br> deleteLast() >> aSong <br> 从列表中删除最后一首歌并返回该歌曲<br> [anIndex] >> aSong <br> 从列表中返回anIndex所索引的歌曲,可以是整数索引或者歌曲的标题。<br> 这个列表给我们一些实现方法的提示。在列表尾端添加歌曲的功能,在最前和最后位置删除歌曲的功能。建议使用双列----一个两端队列----这样我们可以使用Array来实现,同样,数组也支持用一个整数来索引歌曲。<br> 但是我们也需要使用歌曲标题来索引歌曲,可能会想到使用哈希,那样用标题做键歌曲做值。那么可以使用哈希吗?也许可以,不过这样有问题。首先哈希是无序的,所以我们不得不使用一个辅助的数组来跟踪列表。一个更大的麻烦是哈希不支持多个键对应一个值,这会给我们的播放列表带来麻烦,因为一首歌可能会被播放许多次。我们可以在一个歌曲的数组中搜索需要的歌曲标题,如果这会成为执行上的瓶颈,那么我们会在后面加入一些基于哈希的查找特性。<br> 我们从一个基本的initialize方法开始我们的类,创建一个数组用来存放歌曲和一个引用它的实例变量@songs。<br> class SongList<br> def initialize<br> @songs=Array.new<br> end<br> end <br> SongList#append方法在@songs数组末尾添加歌曲,返回它自己也就是当前的SongList对象。这是一个有用的特性,可以让我们把多个append调用联接在一起,后面会看到这个例子。<br> class SongList<br> def append(aSong)<br> @songs.push(aSong)<br> self<br> end<br> end <br> 然后添加deleteFirst和deleteLast方法,简单地用Array#shift和Array#pop来分别实现。<br> class SongList<br> def deleteFirst<br> @songs.shift<br> end<br> def deleteLast<br> @songs.pop<br> end<br> end <br> 让我们来快速地测试一下,在列表中添加四首歌曲。炫耀一下,我们用append返回的SongList对象来联接这些方法调用。<br> list = SongList.new<br> list.<br> append(Song.new('title1', 'artist1', 1)).<br> append(Song.new('title2', 'artist2', 2)).<br> append(Song.new('title3', 'artist3', 3)).<br> append(Song.new('title4', 'artist4', 4)) <br> 然后检查一下列表的开始和结束位置是否正确,当列表空的时候返回nil。<br> list.deleteFirst >> Song: title1--artist1 (1) <br> list.deleteFirst >> Song: title2--artist2 (2) <br> list.deleteLast >> Song: title4--artist4 (4) <br> list.deleteLast >> Song: title3--artist3 (3) <br> list.deleteLast >> nil <br> 很好,下一个方法是[],通过索引来访问元素。如果索引是整数(在这里我们用Object#kind of?来检查),那么返回该位置的元素。<br> class SongList<br> def [](key)<br> if key.kind_of?(Integer)<br> @songs[key]<br> else<br> # ...<br> end<br> end<br> end <br> 再来测试一下<br> list[0] >> Song: title1--artist1 (1) <br> list[2] >> Song: title3--artist3 (3) <br> list[9] >> nil <br> 现在需要添加通过歌曲标题来索引的功能,这要求扫描整个歌曲列表,检查每一首歌曲标题。在这之前,我们需要先来熟悉一下Ruby最简洁的一个特性:迭代器。<br> [[category:Ruby学习教程]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)