`
like.eagle
  • 浏览: 249003 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ruby 数组与hash

    博客分类:
  • ruby
 
阅读更多
【转载地址】: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

分享到:
评论

相关推荐

    Ruby简明教程之数组和Hash介绍

    今天学习的是数组和Hash,数组在很多编程语言中都能常常用到。 数组: 数组是存储数据的一种容器,在Ruby中,数组中存储的数据可以是任何类型的数据;这和JAVA不同,在JAVA中,数组是存储同一类型数据的结构。 1. 在...

    Ruby中的Hash哈希类型基本操作方法小结

    1.创建哈希:就像创建数组一样,我们可以通过Hash类来创建一个Hash实例: h1 = Hash.new #默认值为nil h2 = Hash.new(“This is my first hash instance”) #默认值为” This is my first hash instance”: 上面两...

    Ruby字符串、条件、循环、数组、Hash、类基本操作笔记

    2.单引号与双引号差别: 双引号允许字符转义,单引号不允许转义,里是什么字符,用户看到的就是什么字符 单引号不允许字符插值 字符串拆分 1.以空格拆分:string.split(‘ ‘)字符串连接 方法一、’Ruby’ + ‘Monk’,...

    Ruby常见面试题.pdf

    8. Ruby中的数组(Array)和哈希(Hash)有什么区别?请说明在Ruby中数组和哈希的不同特点。 9. 什么是Ruby中的块(Block)和迭代器(Iterator)?请简要介绍在Ruby中块和迭代器的概念。 10. 在Ruby中如何进行模块...

    精华ruby学习笔记和代码

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

    Ruby中关于hash的基本使用方法

    它类似于数组,除了索引是通过任意键的任何对象的类型,而不是一个整数索引。 顺序遍历一个哈希键或值要么可能看起来是任意的,一般不会在插入顺序。如果访问的键的哈希值不存在,该方法将返回nil。 创建哈希: 使用...

    pluck_to_hash, 扩展ActiveRecord以返回散列的array.zip

    pluck_to_hash, 扩展ActiveRecord以...通过添加返回 pluck_to_hash的array 而不是数组 array的方法扩展 wsrr 。 在抓取多个列以呈现json或者你需要访问视图中的各个字段时有用例如。支持 pluck_to_struct 自版本 0.3.0

    Ruby中的集合编写指南

    倾向数组及哈希的字面表示法(除非你需要传递参数到它们的构造函数中)。 # bad arr = Array.new hash = Hash.new # good arr = [] hash = {} ... 当你需要一个符号的数组(并且不需要保持 Ruby

    Ruby中Hash哈希结构的基本操作方法小结

    关于哈希 先来了解一下Hash的基本思路: ...显然,我们可以用数组来存。也就是:a[1] = 13; a[2] = 7; a[3] = 14; a[4] = 11; 当然,我们也可以用Hash来存。下面给出一个简单的Hash存储: 先来确定那个函

    仓鼠:Ruby的高效,不可变,线程安全的Collection类

    仓鼠 高效,不可变且线程安全的Ruby收集类。 仓鼠提供了6种: , , , , 和 (用作不可变队列或堆栈)。 仓鼠的收藏是一成不变的。... 在可能的情况下,仓鼠(Hamster)集合提供与Ruby的内置Hash , Array和Enumerabl

    leetcode答案-ruby_leetcode:ruby_leetcode

    Ruby LeetCode 做这些题目的不是为了要去应聘这些公司,而是为了锻炼一下自己的算法和编程能力。所以只要会 if, else, for, break, next, while, until, array, hash 就可以刷了。其它的边刷边学就行。 前言 ...

    hash-iteration-prework

    区分遍历数组与遍历哈希。 使用#each遍历哈希。 遍历哈希 以前,我们已经将哈希与字典或存储容器进行了比较。 就像现实中的这些存储方法一样,我们不仅需要访问存储的信息,而且还需要以某种方式加以利用。 这就是...

    hash-iteration-v-000

    区分遍历数组与遍历哈希。 使用#each遍历哈希。 遍历哈希 以前,我们将散列与字典或存储容器进行了比较。 就像现实中的这些存储方法一样,我们不仅需要访问存储的信息,而且还需要以某种方式加以利用。 这就是迭代...

    Ruby 迭代器知识汇总

    在 Ruby 中,数组(Array)和哈希(Hash)可以称之为集合。 迭代器返回集合的所有元素,一个接着一个。在这里我们将讨论两种迭代器,each 和 collect。 Ruby each 迭代器 each 迭代器返回数组或哈希的所有元素。 语法 ...

    shape:验证Ruby对象的形状(哈希,数组等)

    成形验证Ruby对象的“形状”!目录语境到目前为止,此gem的主要目的是充当 gem的依赖项。 宝石可能也有其他潜在用途(例如, have_shape RSpec匹配器可能很有用),但是目前支持active_actions的shaped raison d'ê...

    Ruby on Rails中Rack中间件的基础学习教程

    rack是ruby服务器和rack应用程序之间的一个框架,rails,sinatra都是基于rack构建的,都属于rack应用程序。 rack提供了一个标准的接口,用于与服务器进行交互。标准的rack程序是一个可以响应call的对象,可以是对象、...

    dhash-vips:Ruby gem测量图像相似度

    由ruby-vip提供支持的dHash和IDHash gem dHash是图像指纹识别算法,可用于测量两个图像的相似性。 IDHash是比dHash有所改进的新算法-我将对其进行进一步描述。 您可以 (2013年1月21日)的一文中阅读有关dHash和感知...

    navigable_hash

    导航哈希 NavigableHash 被构建为使用熟悉的 ruby​​ 点表示法在散列或数组对象中导航的轻量级和快速方法。 有关示例,请参见下面的“用法”。 作为字符串或符号的键无关紧要,都包括在内。安装将此行添加到应用...

    hashdiff:Hashdiff是一个Ruby库,用于计算两个哈希之间的最小差异

    Hashdiff是一个Ruby库,用于计算两个哈希之间的最小差异。 它还支持比较两个数组。 Hashdiff不会猴子修补任何现有的类。 所有功能都包含在Hashdiff模块内部。 Docs : 警告:请勿将库用于比较大型数组,例如〜...

Global site tag (gtag.js) - Google Analytics