【转载地址】:http://www.blogjava.net/xvridan/archive/2007/02/07/98538.html
Ruby的数组和hash都是带索引的集合。它们都可以容纳一组对象,并允许以索引键来访问这些对象。对数组而言,索引键是一个整数;而hash则允许用任何对象作为索引键。数组和hash都能够自动增长以容纳新的元素。数组和hash都可以容纳不同类型的对象。
数组:
方括号里列出元素并用逗号将它们相互隔开来创建一个数组. Ruby的数组可以适应不同的对象类型
ruby> ary = [1, 2, "3"]
[1, 2, "3"]
在Ruby中数组中的元素可以是nil(null)。nil在Ruby中是一个对象与其它对象一样,不过它恰好代表“什么都没有”。
就像前面提到的字符串一样.数组也可以相乘或相加
ruby> ary + ["foo", "bar"]
[1, 2, "3", "foo", "bar"]
ruby> ary * 2
[1, 2, "3", 1, 2, "3"]
我们可用索引来访问数组的任意一部分.
ruby> ary[0]
1
ruby> ary[0,2]
[1, 2]
ruby> ary[0..1]
[1, 2]
ruby> ary[-2]
2
ruby> ary[-2,2]
[2, "3"]
ruby> ary[-2..-1]
[2, "3"]
(负数索引表示到数组末尾的偏移,而不是从开头算起.)
数组可以和字符串互相转化,分别使用join和split:
ruby> str = ary.join(":")
"1:2:3"
ruby> str.split(":")
["1", "2", "3"]
数组的一个常用的方法是<<,该方法会把一个值附加到数组的尾端。
ages = []
for person in @people
ages << person.age
end
Ruby提供一个快捷创建由单词组成的数组:
a=['ant','bee','cat']
#this is the same:
a=%w{ant bee cat}
哈希表
一个关联数组不通过连续的数字索引来访问,而是通过任何类型的主键(key)访问.这样的数组有时被叫作哈希(hash)或者字典
(dictionary).在Ruby里,我们趋向于用哈希这个术语.将一对对的元素用逗号分隔开,并用大括号({})括起来,这样就组成了一个哈希表.
你用一个关键字在哈希表里进行搜索,就像你在数组里用索引来提取数据一样.
ruby> h = {1 => 2, "2" => "4"}
{1=>2, "2"=>"4"}
ruby> h[1]
2
ruby> h["2"]
"4"
ruby> h[5]
nil
ruby> h[5] = 10 # appending value
10
ruby> h
{5=>10, 1=>2, "2"=>"4"}
ruby> h.delete 1 # deleting value
2
ruby> h[1]
nil
ruby> h
{5=>10, "2"=>"4"}
=>左边的是索引键,右边的是与之对应的值。在同一hash中,索引键必须唯一。hash中的键和值可以是任意对象,甚至可以在hash中保存数组或别的hash.
在访问hash中的元素时,索引也是放在方括号中。
方法调用时,可以传入hash作为参数。如果这个hash正好是调用的最后一个参数,Ruby允许省略大括号。如rails中的redirect_to()方法
redirect_to :action =>'show', :id=>product.id
分享到:
相关推荐
今天学习的是数组和Hash,数组在很多编程语言中都能常常用到。 数组: 数组是存储数据的一种容器,在Ruby中,数组中存储的数据可以是任何类型的数据;这和JAVA不同,在JAVA中,数组是存储同一类型数据的结构。 1. 在...
1.创建哈希:就像创建数组一样,我们可以通过Hash类来创建一个Hash实例: h1 = Hash.new #默认值为nil h2 = Hash.new(“This is my first hash instance”) #默认值为” This is my first hash instance”: 上面两...
2.单引号与双引号差别: 双引号允许字符转义,单引号不允许转义,里是什么字符,用户看到的就是什么字符 单引号不允许字符插值 字符串拆分 1.以空格拆分:string.split(‘ ‘)字符串连接 方法一、’Ruby’ + ‘Monk’,...
8. Ruby中的数组(Array)和哈希(Hash)有什么区别?请说明在Ruby中数组和哈希的不同特点。 9. 什么是Ruby中的块(Block)和迭代器(Iterator)?请简要介绍在Ruby中块和迭代器的概念。 10. 在Ruby中如何进行模块...
这个笔记里包含了ruby的整型,字符串,浮点数,布尔等基础数据类型,还有数组,哈希hash的用法, 类的定义,函数方法,以及对象定义,其他高级用法解释,除了笔记记录的语法糖之外,还包含了一些解释性的代码,帮助...
它类似于数组,除了索引是通过任意键的任何对象的类型,而不是一个整数索引。 顺序遍历一个哈希键或值要么可能看起来是任意的,一般不会在插入顺序。如果访问的键的哈希值不存在,该方法将返回nil。 创建哈希: 使用...
pluck_to_hash, 扩展ActiveRecord以...通过添加返回 pluck_to_hash的array 而不是数组 array的方法扩展 wsrr 。 在抓取多个列以呈现json或者你需要访问视图中的各个字段时有用例如。支持 pluck_to_struct 自版本 0.3.0
倾向数组及哈希的字面表示法(除非你需要传递参数到它们的构造函数中)。 # bad arr = Array.new hash = Hash.new # good arr = [] hash = {} ... 当你需要一个符号的数组(并且不需要保持 Ruby
关于哈希 先来了解一下Hash的基本思路: ...显然,我们可以用数组来存。也就是:a[1] = 13; a[2] = 7; a[3] = 14; a[4] = 11; 当然,我们也可以用Hash来存。下面给出一个简单的Hash存储: 先来确定那个函
仓鼠 高效,不可变且线程安全的Ruby收集类。 仓鼠提供了6种: , , , , 和 (用作不可变队列或堆栈)。 仓鼠的收藏是一成不变的。... 在可能的情况下,仓鼠(Hamster)集合提供与Ruby的内置Hash , Array和Enumerabl
Ruby LeetCode 做这些题目的不是为了要去应聘这些公司,而是为了锻炼一下自己的算法和编程能力。所以只要会 if, else, for, break, next, while, until, array, hash 就可以刷了。其它的边刷边学就行。 前言 ...
区分遍历数组与遍历哈希。 使用#each遍历哈希。 遍历哈希 以前,我们已经将哈希与字典或存储容器进行了比较。 就像现实中的这些存储方法一样,我们不仅需要访问存储的信息,而且还需要以某种方式加以利用。 这就是...
区分遍历数组与遍历哈希。 使用#each遍历哈希。 遍历哈希 以前,我们将散列与字典或存储容器进行了比较。 就像现实中的这些存储方法一样,我们不仅需要访问存储的信息,而且还需要以某种方式加以利用。 这就是迭代...
在 Ruby 中,数组(Array)和哈希(Hash)可以称之为集合。 迭代器返回集合的所有元素,一个接着一个。在这里我们将讨论两种迭代器,each 和 collect。 Ruby each 迭代器 each 迭代器返回数组或哈希的所有元素。 语法 ...
成形验证Ruby对象的“形状”!目录语境到目前为止,此gem的主要目的是充当 gem的依赖项。 宝石可能也有其他潜在用途(例如, have_shape RSpec匹配器可能很有用),但是目前支持active_actions的shaped raison d'ê...
rack是ruby服务器和rack应用程序之间的一个框架,rails,sinatra都是基于rack构建的,都属于rack应用程序。 rack提供了一个标准的接口,用于与服务器进行交互。标准的rack程序是一个可以响应call的对象,可以是对象、...
由ruby-vip提供支持的dHash和IDHash gem dHash是图像指纹识别算法,可用于测量两个图像的相似性。 IDHash是比dHash有所改进的新算法-我将对其进行进一步描述。 您可以 (2013年1月21日)的一文中阅读有关dHash和感知...
导航哈希 NavigableHash 被构建为使用熟悉的 ruby 点表示法在散列或数组对象中导航的轻量级和快速方法。 有关示例,请参见下面的“用法”。 作为字符串或符号的键无关紧要,都包括在内。安装将此行添加到应用...
Hashdiff是一个Ruby库,用于计算两个哈希之间的最小差异。 它还支持比较两个数组。 Hashdiff不会猴子修补任何现有的类。 所有功能都包含在Hashdiff模块内部。 Docs : 警告:请勿将库用于比较大型数组,例如〜...