`
fujinbing
  • 浏览: 232226 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ruby 的数组操作

    博客分类:
  • java
 
阅读更多
ruby语言的内置数据结构强大到让我震惊。下面展示了ruby数组的部分魔力


1. &

[ 1, 1, 3, 5 ] & [ 1, 2, 3 ] # => [1, 3]

取两个数组中都有的元素,但只取一个,不重复取。

2. *

[ 1, 2, 3 ] * 3 # => [1, 2, 3, 1, 2, 3, 1, 2, 3]

如果*号后面跟的是数字n,将原先数组中的所有元素重复n次,串联起来。相当于普通数字的乘法操作。

[ 1, 2, 3 ] * "--" # => "1--2--3"

如果*号后面跟的是字符串,也将返回字符串。

3. +

[ 1, 2, 3 ] + [1, 4, 5 ] # => [1, 2, 3, 1, 4, 5]

简单的将两个数组连接在一起,不删除重复元素。

4. -

[ 1, 1, 2, 2, 3, 3, 4, 5 ] - [ 1, 2, 4 ]
# => [3, 3, 5]

从第一个数组中删除所有出现在第二给数组中的元素。

5. <<

[ 1, 2 ] << "c" << "d" << [ 3, 4 ] << [3, 4]
# => [1, 2, "c", "d", [3, 4], [3, 4]]

在数组末尾添加新元素,也不管重复不重复。

6. ==

[ "a", "c" ] == [ "a", "c", 7 ] # => false
[ "a", "c", 7 ] == [ "a", "c", 7 ] # => true
[ "a", "c", 7 ] == [ "a", "d", "f" ] # => false

判断两个数组是否相等——数组相等的前提是,数组所有元素相等,数组大小也当然相等。

7. |

[ "a", "b", "c" ] | [ "c", "d", "a" ]
# => ["a", "b", "c", "d"]

取两个数组中所有元素组成的集合,删除重复元素。

8. at

a = [ "a", "b", "c", "d", "e" ]
a.at(0) # => "a"
a.at(-1) # => "e"
a.at(5) # => nil

取回某个索引中的元素,倒数第一个索引是-1,第二个是-2。

9. clear

a = [ "a", "b", "c", "d", "e" ]
a.clear # => []

删除数组中的所有元素

10. collect!

a = [ "a", "b", "c", "d" ]
a.collect! {|x| x + "$" } # => ["a$", "b$", "c$", "d$"]
a # => ["a$", "b$", "c$", "d$"]

对数组中的每一个元素进行遍历,block中对元素的操作将改变元素的值。

11. compact

[ "a", nil, "b", nil, "c", nil ].compact # => ["a", "b", "c"]

删除数组中所有值为nil的元素,也即压缩数组。

12. concat

[ "a", "b" ].concat( ["c", "d"] ) # => ["a", "b", "c", "d"]

将第二个数组中的元素添加在第一个数组末尾,组成新数组。

13. count

[1, 2, 3, 4].count(3) # => 1
[1, 2, 3,3, 4].count(3) # => 2
[1, 2, 3, 4].count {|obj| obj > 2 } # => 2

计算数组中等于某个值的元素有几个。

14. delete

a = [ "a", "b", "b", "b", "c" ]
a.delete("b") # => "b"
a # => ["a", "c"]
a.delete("z") # => nil
a.delete("z") { "not found" } # => "not found"

删除数组中值为某个给定值的元素。

15. each

a = [ "a", "b", "c" ]
a.each {|x| print x, " -- " }
result :
a -- b -- c --

遍历数组,打印元素值。

16. each_index

a = [ "a", "b", "c" ]
a.each_index {|x| print x, " -- " }
result :
0 -- 1 -- 2 --

遍历数组,打印索引。

17. empty?

[].empty? # => true
[ 1, 2, 3 ].empty? # => false

判断数组是否为空。

18. join

[ "a", "b", "c" ].join # => "abc"
[ "a", "b", "c" ].join("-") # => "a-b-c"

将数组中的元素连接成字符串。如果给定参数,则在每个元素直接加入该参数。

19. last

[ "w", "x", "y", "z" ].last # => "z"
[ "w", "x", "y", "z" ].last(1) # => ["z"]
[ "w", "x", "y", "z" ].last(3) # => ["x", "y", "z"]

如果不给定参数,取最后一个元素。如果给定参数n,取最后n个参数组成数组。

20. length

[ 1, nil, 3, nil, 5 ].length # => 5

长度。空元素nil也算元素,计算在长度范围内。

21. pop

a = %w{ f r a b j o u s }
a.pop # => "s"
a # => ["f", "r", "a", "b", "j", "o", "u"]
a.pop(3) # => ["j", "o", "u"]
a # => ["f", "r", "a", "b"]

返回删除了最后n个元素后的数组。

22. push

a = [ "a", "b", "c" ]
a.push("d", "e", "f") # => ["a", "b", "c", "d", "e", "f"]

在数组末尾插入元素。

23. replace

a = [ "a", "b", "c", "d", "e" ]
a.replace([ "x", "y", "z" ]) # => ["x", "y", "z"]
a # => ["x", "y", "z"]

用新数组替换旧数组。

24. reverse

[ "a", "b", "c" ].reverse # => ["c", "b", "a"]
[ 1 ].reverse # => [1]

反转数组。

25. shift

args = [ "-m", "-q", "-v", "filename" ]
args.shift # => "-m"
args.shift(2) # => ["-q", "-v"]
args # => ["filename"]

从数组头部删除n个元素,并将他们返回。若删除的是一个,则返回字符串。若删除两个以上元素,则返回这n个组成的新数组。原数组被改变。

26. unshift

a = [ "b", "c", "d" ]
a.unshift("a") # => ["a", "b", "c", "d"]
a.unshift(1, 2) # => [1, 2, "a", "b", "c", "d"]

在头部加入元素,原数组元素往后移。

27. shuffle

[ 1, 2, 3, 4, 5, 1 ].shuffle # => [5, 1, 3, 4, 1, 2]

将原数组随机打乱。

28. sort

a = [ "d", "a", "e", "c", "b" ]
a.sort! # => ["a", "b", "c", "d", "e"]
a # => ["a", "b", "c", "d", "e"]

返回排序好的数组。

29. values_at

a = %w{ a b c d e f }
a.values_at(1, 3, 5) # => ["b", "d", "f"]
a.values_at(1, 3, 5, 7) # => ["b", "d", "f", nil]
a.values_at(-1, -3, -5, -7) # => ["f", "d", "b", nil]
a.values_at(1..3, 2...5) # => ["b", "c", "d", "c", "d", "e"]

一次取回多个索引位置的值。

30. uniq

a = [ "a", "a", "b", "b", "c" ]
a.uniq # => ["a", "b", "c"]

返回数组中不同的元素。原数组不受影响。


Ruby迭代器each、map、collect、inject

说明:
each——连续访问集合的所有元素
collect—-从集合中获得各个元素传递给block,block返回的结果生成新的集合。
map——-同collect。
inject——遍历集合中的各个元素,将各个元素累积成返回一个值。

例子:
def debug(arr)
    puts '--------'
    puts arr
end

h = [1,2,3,4,5]
h1 = h
h1.each{|v|puts sprintf('values is:%s',v)}

h2 = h.collect{|x| [x,x*2]}
debug h2

h3 = h.map{|x| x*3 }
debug h3

h4 = h.inject{|sum,item| sum+item}
debug h4   
结果:
values is:1
values is:2
values is:3
values is:4
values is:5
--------
1
2
2
4
3
6
4
8
5
10
--------
3
6
9
12
15
--------
15
names = %w[ruby rails java python cookoo firebody]
等同于:
names = ["ruby", "rails", "java", "python", "cookoo", "firebody"]

arr = [1,2,3]
1) arr2 = arr.each{|element| element = element * 2} #arr与arr2仍然都等于[1,2,3]   each返回原数组 遍历内对元素的更改不会保存
2) arr2 = arr.map{|element| element = element* 2} #arr等于[1,2,3] arr2等于[2,4,6] map返回更改后的数组 遍历内对元素的更改不会保存
3) arr2 = arr.map!{|element| element = element * 2} #arr与arr2都等于[2,4,6] map!返回更改后的数组 遍历对元素内的更改会保存
collect 效果等于 map
collect! 效果等于map!
if ($ != jQuery) { $ = jQuery.noConflict(); }
分享到:
评论
1 楼 zhangzijun1984 2017-08-22  
谢谢! 写的很详细

相关推荐

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

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

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

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

    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...

    square_array-ruby-apply-000

    如何在数组的每个元素上进行操作,还如何收集或存储这些元素? 我如何平方一个数字? 提示:有多种方法可以做到! Google Ruby的指数运算符,或参考上一课中有关简单数学的内容。先进的一旦测试通过,请查看是否...

Global site tag (gtag.js) - Google Analytics