`
rloc2003
  • 浏览: 57744 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

ruby数组操作

    博客分类:
  • ruby
阅读更多

1. 如何创建数组?

最简单的,x=[]将创建一个空数组:



QUOTE:
irb(main):004:0> x = []
=> []




另外还可以使用标准的new方法,任何数组都是Array类的实例。



QUOTE:
irb(main):001:0> x = Array.new
=> []

irb(main):002:0> x = Array.new(3)
=> [nil, nil, nil]

irb(main):003:0> x = Array.new(3,"a")
=> ["a", "a", "a"]




上述第一个创建空数组,第二个创建预设SIZE的数组,第三个创建预设SIZE和值的数组。
跟Hash一样,第三种方法填充的预设值,都指向同一个目标。
任何一个位置的目标改变了,都影响所有元素的值:



QUOTE:
irb(main):005:0> x = Array.new(3,"a")
=> ["a", "a", "a"]

irb(main):006:0> x[0] << "b"
=> "ab"

irb(main):007:0> x
=> ["ab", "ab", "ab"]




创建的数组,每个元素都是唯一目标,要这样做:



QUOTE:
irb(main):008:0> x = Array.new(3) do |e| e = "a" end
=> ["a", "a", "a"]

irb(main):009:0> x[0] << "b"
=> "ab"

irb(main):010:0> x
=> ["ab", "a", "a"]




当然还可以如下创建数组:



QUOTE:
irb(main):012:0> x = Array.[](1,2,3) 
=> [1, 2, 3]

irb(main):013:0> x = Array[1,2,3]
=> [1, 2, 3]




不过很少使用,不如x=[1,2,3]来的简洁方便。


2. 如何访问数组?

使用数组下标:



QUOTE:
irb(main):014:0> x = [3,2,1,4]
=> [3, 2, 1, 4]

irb(main):015:0> x[0]
=> 3

irb(main):016:0> x[-1]
=> 4




0表示第一个元素,-1表示最后一个元素,其他类推。

还有first和last方法:



QUOTE:
irb(main):017:0> x.first
=> 3
irb(main):018:0> x.last
=> 4




first和last可以带一个整数参数,表示返回首尾多少个元素。

遍历数组使用each方法:



QUOTE:
irb(main):024:0> x.each do |s| puts s end
1
2
3
=> [1, 2, 3]





3. 数组的slice?

数组的slice可以对数组切片,返回指定位置和长度的片段。



QUOTE:
irb(main):021:0> x[0,2]
=> [3, 2]

irb(main):022:0> x[0..2]
=> [3, 2, 1]

irb(main):023:0> x[0...2]
=> [3, 2]




第一个表述从0位置开始切片,长度为2,返回2个元素。
第二个表示从0位置开始切片,到2位置结束,返回3个元素。
第三个表示从0位置开始切片,到2位置结束,但是不包括最后一位,返回2个元素。


4. 如何修改数组?

数组有push和<<方法,表示添加元素到数组尾部:



QUOTE:
irb(main):024:0> x = [3,2,1,4]
=> [3, 2, 1, 4]

irb(main):025:0> x.push(5)
=> [3, 2, 1, 4, 5]

irb(main):026:0> x << 6
=> [3, 2, 1, 4, 5, 6]




pop方法表示从尾部删除元素,shift表示从首部删除元素:



QUOTE:
irb(main):027:0> x.pop
=> 6

irb(main):028:0> x.shift
=> 3




对应的有unshift方法,表示从首部添加元素:



QUOTE:
irb(main):029:0> x.unshift(0)
=> [0, 2, 1, 4, 5]




数组的insert方法可以在指定位置插入元素:



QUOTE:
irb(main):053:0> x
=> [1, 2, 3]

irb(main):054:0> x.insert(1,5)
=> [1, 5, 2, 3]




当然delete和delete_at方法可以删除对应的元素。
delete_at的参数是数组索引:



QUOTE:
irb(main):021:0> x.delete_at(1)
=> 5





5. 数组的加减操作?

ruby很灵活,任何目标都可以定义自己的方法。
数组就定义了加减方法(当然还有乘除,不过很少使用)。



QUOTE:
irb(main):031:0* x = [1,2,3]
=> [1, 2, 3]

irb(main):032:0> y = [4,5,6]
=> [4, 5, 6]

irb(main):033:0> z = x + y
=> [1, 2, 3, 4, 5, 6]

irb(main):034:0> z - x
=> [4, 5, 6]




所谓加就是把两个数组合并起来,所谓减就是把相同的元素排除掉。
而且这个减似乎不在意元素顺序:



QUOTE:
irb(main):043:0> x
=> [1, 2, 3]

irb(main):044:0> a
=> [3, 2, 1]

irb(main):045:0> x-a
=> []





6. 求唯一数组?

在ruby里这个很方便,用uniq方法:



QUOTE:
irb(main):046:0> x = [1,2,3,3,2,1]
=> [1, 2, 3, 3, 2, 1]

irb(main):047:0> x.uniq
=> [1, 2, 3]




当然x.uniq!这样加个叹号,表示毁坏性方法,不返回而是直接改变x目标自身。


7. 数组的比较?

可以直接用==进行比较:



QUOTE:
irb(main):048:0> x = [1,2,3]
=> [1, 2, 3]

irb(main):049:0> y = [3,2,1]
=> [3, 2, 1]

irb(main):050:0> x == y
=> false

irb(main):051:0> a = [1,2,3]
=> [1, 2, 3]

irb(main):052:0> x == a
=> true





8. 数组的类型转换?

数组可以转换成串,使用to_s或者join方法:



QUOTE:
irb(main):001:0> x=[1,2,3,4]
=> [1, 2, 3, 4]

irb(main):002:0> x.to_s
=> "1234"

irb(main):003:0> x.join "-"
=> "1-2-3-4"




串也可以转换成数组:



QUOTE:
irb(main):012:0> str="1 2 3 4"
=> "1 2 3 4"

irb(main):013:0> str.to_a
=> ["1 2 3 4"]




这可能不是你想要的,那么执行:



QUOTE:
irb(main):018:0> str.split(/ /).map {|s| s.to_i}
=> [1, 2, 3, 4]




Hash可以直接转换成二维数组:



QUOTE:
irb(main):010:0> hash={1=>2,3=>4}
=> {1=>2, 3=>4}

irb(main):011:0> hash.to_a
=> [[1, 2], [3, 4]]




数组可以转换成hash,见我前一篇帖子。


9. 如何查找数组元素?



QUOTE:
irb(main):034:0> x = [3,2,1,4,4]
=> [3, 2, 1, 4, 4]

irb(main):032:0> x.include? 4
=> true

irb(main):035:0> x.find do |s| s == 4 end
=> 4

irb(main):036:0> x.select do |s| s == 4 end
=> [4, 4]




include?判断是否包含该元素,返回true或false。
find找出符合条件的一个元素,返回该元素。
select找出符合条件的所有元素,返回结果也是数组。


10. 数组的排序?

使用sort:



QUOTE:
irb(main):049:0> x = [3,1,4,0,1]
=> [3, 1, 4, 0, 1]

irb(main):050:0> x.sort
=> [0, 1, 1, 3, 4]

irb(main):052:0> x.sort.reverse
=> [4, 3, 1, 1, 0]




还有sort_by方法,接受一个block作为参数,按照指定规则进行排序。


11. 其他实用数组方法?

展开数组:



QUOTE:
irb(main):025:0> x = [1,2,3,[0,1,2]]
=> [1, 2, 3, [0, 1, 2]]

irb(main):026:0> x.flatten
=> [1, 2, 3, 0, 1, 2]




清空数组:



QUOTE:
irb(main):027:0> x.clear
=> []




替换数组:



QUOTE:
irb(main):028:0> x.replace [3,2,1]
=> [3, 2, 1]




合并数组:



QUOTE:
irb(main):030:0> x.concat [1,2,3]
=> [3, 2, 1, 1, 2, 3]





12. 数组的inject方法?



QUOTE:
irb(main):044:0> x = [1,2,3,4]
=> [1, 2, 3, 4]

irb(main):045:0> x.inject(0){|sum, item| sum += item}  
=> 10




inject的参数0表示初始化sum,item表示遍历每一个元素,在block里不断自加,最后返回累计加值。



QUOTE:
irb(main):047:0> x.inject([]){|new, item| new << -item}    
=> [-1, -2, -3, -4]




上述inject作用,表示取数组的每个元素的负值,返回一个新数组。当然用map更简洁:



QUOTE:
irb(main):048:0> x.map {|item| -item}
=> [-1, -2, -3, -4]




map的item也表示遍历数组元素,对元素进行计算后,返回一个结果数组。

 

 

原文链接地址 http://bbs.chinaunix.net/thread-1828498-1-1.html

分享到:
评论

相关推荐

    Ruby教程之注释、变量声明以及数组操作

    D瓜哥在学Ruby,正好也写一篇“Ruby入门教程”。需要说明一下,这篇文章适合有编程基础的,但是没接触过Ruby的新手。而且,这篇文章侧重入门,老鸟可以直接飞过。(如果能帮忙检查一下是否有描述不当,甚至错误的...

    编程univbasics 4数组简单数组操作在线网络前功

    简单数组操作简介 学习目标 确定数组上方法调用的结果 执行简单的数组操作 介绍 在先前的实验室中,您学习了如何创建数组和访问数组的元素。 现在,您可以使用不同的Ruby方法来操纵数组了。 分叉并克隆此实验室。 ...

    Ruby常见面试题.pdf

    5. 什么是Ruby中的字符串(String)操作?请说明在Ruby中的字符串常用操作方法。 6. 在Ruby中如何定义函数(Method)?请简要介绍在Ruby中的函数定义和调用方式。 7. Ruby中如何处理异常(Exception Handling)?请...

    multiarray:用于多维和统一数组的 Ruby 扩展

    {Hornetseye::MultiArray} 提供具有相同类型元素的多维 Ruby 数组。 该扩展旨在与 Masahiro Tanaka 的 NArray 兼容。 但是它允许定义自定义元素类型和对它们的操作。 这项工作还受到了 Ronald Garcia 的 boost::...

    Ruby 小白入门指南理解 Ruby 及其特点.txt

    你可以从 Ruby 的官方网站下载适合你操作系统的安装包,并按照安装指南进行安装。安装完成后,你可以在命令行中输入 ruby -v 来检查 Ruby 是否成功安装以及安装的版本。 三、学习基础语法 变量和数据类型:Ruby ...

    Ruby编程语言

    在对Ruby进行了简要的综述之后,《Ruby编程语言》详细介绍了以下内容:Ruby的句法和语法结构,数据结构和对象,表达式和操作符,语句和控制结构,方法、proc、lambda和闭包,反射和元编程,Ruby平台。本书还包含对...

    简单数组介绍前功

    熟练执行简单的数组操作。 熟练理解数组上方法调用的结果。简单数组操作简介在先前的实验室中,您学习了如何创建数组和访问数组的元素。 现在,您可以使用不同的Ruby方法来操纵数组了。指示分叉并克隆此实验室。 ...

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

    一、字符串操作 字符串插值 1.#{}: 任意放置在#{}中的合法Ruby代码都将被求值,并被替换为求值结果插入到原位置 2.单引号与双引号差别: 双引号允许字符转义,单引号不允许转义,里是什么字符,用户看到的就是什么字符...

    针对您的Active Model的自定义验证,用于检查另一个数组中是否包含一个数组-Ruby开发

    ActiveRecord :: Base DEFAULT_PERMISSION = [“读取”,“写入”,“共享”] validates_intersection_of:permission,在:DEFAULT_PERMISSION结束如果要基于数组验证用户,请执行以下操作:user

    atomic_arrays:ActiveRecordPostgreSQL扩展,用于对Postgres数组进行原子操作

    原子阵列AtomicArrays是一个轻量级的宝石,旨在通过提供一些简单的方法来更新数据库及其调用实例中的数组,从而帮助ActiveRecord进行PostgreSQL数组操作。 这些方法本质上是原子的,因为它们在不依赖当前对象的实例...

    data_structures:各种数据结构的 Ruby 实现

    [] []= 推流行音乐找删除最大限度分钟排序数组Array 的子类,但它仍然按所有操作排序堆队列链表双端列表排序列表双向链表二叉搜索树红黑树2-3-4 树哈希表堆图形加权图算法冒泡排序 插入排序 选择排序 奇偶排序 归并...

    intro-to-simple-array-manipulations-online-web-prework

    熟练执行简单的数组操作。 熟练理解数组上方法调用的结果。 简单数组操作简介 在先前的实验室中,您学习了如何创建数组和访问数组的元素。现在,您可以使用不同的Ruby方法来操纵数组了。 指示 分叉并克隆此实验室。...

    Ruby介绍实验室的功课

    阵列实验室简介 目标 以不同的方式创建数组。... 第三组测试要求您使用数组方法访问数组元素并在数组上执行其他操作。 阅读_spec.rb文件,以了解通过测试所需的条件。 资源 在Learn.co上查看,并开始免费学习编码。

    ot.rb:操作转换库ot.js的Ruby端口

    ot.rb 这是操作转换库的Ruby端口。 目前,仅已移植TextOperation 。安装将此行添加到您的应用程序的Gemfile中: gem 'ot' 然后执行: $ bundle或将其自己安装为: $ gem install ot用法文字操作retain(n) 跳过给定...

    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的高效,不可变,线程安全的Collection类

    仓鼠 高效,不可变且线程安全的Ruby... 也就是说,尽管Ruby的collection方法总是返回数组,但Hamster集合将尽可能返回相同类的实例。 在可能的情况下,仓鼠(Hamster)集合提供与Ruby的内置Hash , Array和Enumerabl

    leetcode答案-ruby_leetcode:ruby_leetcode

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

    ruby-intro-to-arrays-lab-001-prework-web

    阵列实验室简介 目标 以不同的方式创建数组。... 第三组测试要求您使用数组方法访问数组元素并在数组上执行其他操作。 阅读_spec.rb文件,以了解通过测试所需的条件。 资源 在Learn.co上查看,并开始免费学习编码。

    ruby-intro-to-arrays-lab-online-web-prework

    阵列实验室简介目标以不同的方式创建数组。...第三组测试要求您使用数组方法访问数组元素并在数组上执行其他操作。阅读_spec.rb文件,以了解通过测试所需的条件。资源在Learn.co上查看,并开始免费学习编码。

    Ruby简明教程之方法(Method)介绍

    Ruby做为面向对象语言,肯定要对对象进行相关的操作,这时候就涉及到方法了。 调用方法 – 对象.方法名(实参1,实参2,…,实参n) 方法的分类: 1. 实例方法:顾名思义,就是由实例来调用的方法。例如,“10, 20, 30...

Global site tag (gtag.js) - Google Analytics