Ruby 教程 之 Ruby 数组(Array) 2

简介: Ruby 数组(Array)

Ruby 教程 之 Ruby 数组(Array) 2

Ruby 数组(Array)

数组内建方法

我们需要有一个 Array 对象的实例来调用 Array 方法。下面是创建 Array 对象实例的方式:

这将返回一个使用给定对象进行填充的新数组。现在,使用创建的对象,我们可以调用任意可用的方法。例如:

实例

!/usr/bin/ruby

digits = Array(0..9)

num = digits.at(6)

puts "#{num}"
以上实例运行输出结果为:

6
下面是公共的数组方法(假设 array 是一个 Array 对象):

序号 方法 & 描述
1 array & other_array
返回一个新的数组,包含两个数组中共同的元素,没有重复。
2 array int [or] array str
返回一个新的数组,新数组通过连接 self 的 int 副本创建的。带有 String 参数时,相当于 self.join(str)。
3 array + other_array
返回一个新的数组,新数组通过连接两个数组产生第三个数组创建的。
4 array - other_array
返回一个新的数组,新数组是从初始数组中移除了在 other_array 中出现的项的副本。
5 str <=> other_str
把 str 与 other_str 进行比较,返回 -1(小于)、0(等于)或 1(大于)。比较是区分大小写的。
6 array | other_array
通过把 other_array 加入 array 中,移除重复项,返回一个新的数组。
7 array << obj
把给定的对象附加到数组的末尾。该表达式返回数组本身,所以几个附加可以连在一起。
8 array <=> other_array
如果数组小于、等于或大于 other_array,则返回一个整数(-1、 0 或 +1)。
9 array == other_array
如果两个数组包含相同的元素个数,且每个元素与另一个数组中相对应的元素相等(根据 Object.==),那么这两个数组相等。
10 array[index] [or] array[start, length] [or]
array[range] [or] array.slice(index) [or]
array.slice(start, length) [or] array.slice(range)
返回索引为 index 的元素,或者返回从 start 开始直至 length 个元素的子数组,或者返回 range 指定的子数组。负值索引从数组末尾开始计数(-1 是最后一个元素)。如果 index(或开始索引)超出范围,则返回 nil。
11 array[index] = obj [or]
array[start, length] = obj or an_array or nil [or]
array[range] = obj or an_array or nil
设置索引为 index 的元素,或者替换从 start 开始直至 length 个元素的子数组,或者替换 range 指定的子数组。如果索引大于数组的当前容量,那么数组会自动增长。负值索引从数组末尾开始计数。如果 length 为零则插入元素。如果在第二种或第三种形式中使用了 nil,则从 self 删除元素。
12 array.abbrev(pattern = nil)
为 self 中的字符串计算明确的缩写集合。如果传递一个模式或一个字符串,只考虑当字符串匹配模式或者以该字符串开始时的情况。
13 array.assoc(obj)
搜索一个数组,其元素也是数组,使用 obj.== 把 obj 与每个包含的数组的第一个元素进行比较。如果匹配则返回第一个包含的数组,如果未找到匹配则返回 nil。
14 array.at(index)
返回索引为 index 的元素。一个负值索引从 self 的末尾开始计数。如果索引超出范围则返回 nil。
15 array.clear
从数组中移除所有的元素。
16 array.collect { |item| block } [or]
array.map { |item| block }
为 self 中的每个元素调用一次 block。创建一个新的数组,包含 block 返回的值。
17 array.collect! { |item| block } [or]
array.map! { |item| block }
为 self 中的每个元素调用一次 block,把元素替换为 block 返回的值。
18 array.compact
返回 self 的副本,移除了所有的 nil 元素。
19 array.compact!
从数组中移除所有的 nil 元素。如果没有变化则返回 nil。
20 array.concat(other_array)
追加 other_array 中的元素到 self 中。
21 array.delete(obj) [or]
array.delete(obj) { block }
从 self 中删除等于 obj 的项。如果未找到相等项,则返回 nil。如果未找到相等项且给出了可选的代码 block,则返回 block 的结果。
22 array.delete_at(index)
删除指定的 index 处的元素,并返回该元素。如果 index 超出范围,则返回 nil。
23 array.delete_if { |item| block }
当 block 为 true 时,删除 self 的每个元素。
24 array.each { |item| block }
为 self 中的每个元素调用一次 block,传递该元素作为参数。
25 array.each_index { |index| block }
与 Array#each 相同,但是传递元素的 index,而不是传递元素本身。
26 array.empty?
如果数组本身没有包含元素,则返回 true。
27 array.eql?(other)
如果 array 和 other 是相同的对象,或者两个数组带有相同的内容,则返回 true。
28 array.fetch(index) [or]
array.fetch(index, default) [or]
array.fetch(index) { |index| block }
尝试返回位置 index 处的元素。如果 index 位于数组外部,则第一种形式会抛出 IndexError 异常,第二种形式会返回 default,第三种形式会返回调用 block 传入 index 的值。负值的 index 从数组末尾开始计数。
29 array.fill(obj) [or]
array.fill(obj, start [, length]) [or]
array.fill(obj, range) [or]
array.fill { |index| block } [or]
array.fill(start [, length] ) { |index| block } [or]
array.fill(range) { |index| block }
前面三种形式设置 self 的被选元素为 obj。以 nil 开头相当于零。nil 的长度相当于 self.length。最后三种形式用 block 的值填充数组。block 通过带有被填充的每个元素的绝对索引来传递。
30 array.first [or]
array.first(n)
返回数组的第一个元素或前 n 个元素。如果数组为空,则第一种形式返回 nil,第二种形式返回一个空的数组。
31 array.flatten
返回一个新的数组,新数组是一个一维的扁平化的数组(递归)。
32 array.flatten!
把 array 进行扁平化。如果没有变化则返回 nil。(数组不包含子数组。)
33 array.frozen?
如果 array 被冻结(或排序时暂时冻结),则返回 true。
34 array.hash
计算数组的哈希代码。两个具有相同内容的数组将具有相同的哈希代码。
35 array.include?(obj)
如果 self 中包含 obj,则返回 true,否则返回 false。
36 array.index(obj)
返回 self 中第一个等于 obj 的对象的 index。如果未找到匹配则返回 nil。
37 array.indexes(i1, i2, ... iN) [or]
array.indices(i1, i2, ... iN)
该方法在 Ruby 的最新版本中被废弃,所以请使用 Array#values_at。
38 array.indices(i1, i2, ... iN) [or]
array.indexes(i1, i2, ... iN)
该方法在 Ruby 的最新版本中被废弃,所以请使用 Array#valuesat。
39 array.insert(index, obj...)
在给定的 index 的元素前插入给定的值,index 可以是负值。
40 array.inspect
创建一个数组的可打印版本。
41 array.join(sep=$,)
返回一个字符串,通过把数组的每个元素转换为字符串,并使用 sep 分隔进行创建的。
42 array.last [or] array.last(n)
返回 self 的最后一个元素。如果数组为空,则第一种形式返回 nil。
43 array.length
返回 self 中元素的个数。可能为零。
44 array.map { |item| block } [or]
array.collect { |item| block }
为 self 的每个元素调用一次 block。创建一个新的数组,包含 block 返回的值。
45 array.map! { |item| block } [or]
array.collect! { |item| block }
为 array 的每个元素调用一次 block,把元素替换为 block 返回的值。
46 array.nitems
返回 self 中 non-nil 元素的个数。可能为零。
47 array.pack(aTemplateString)
根据 aTemplateString 中的指令,把数组的内容压缩为二进制序列。指令 A、 a 和 Z 后可以跟一个表示结果字段宽度的数字。剩余的指令也可以带有一个表示要转换的数组元素个数的数字。如果数字是一个星号(*),则所有剩余的数组元素都将被转换。任何指令后都可以跟一个下划线(
),表示指定类型使用底层平台的本地尺寸大小,否则使用独立于平台的一致的尺寸大小。在模板字符串中空格会被忽略。
48 array.pop
从 array 中移除最后一个元素,并返回该元素。如果 array 为空则返回 nil。
49 array.push(obj, ...)
把给定的 obj 附加到数组的末尾。该表达式返回数组本身,所以几个附加可以连在一起。
50 array.rassoc(key)
搜索一个数组,其元素也是数组,使用 == 把 key 与每个包含的数组的第二个元素进行比较。如果匹配则返回第一个包含的数组。
51 array.reject { |item| block }
返回一个新的数组,包含当 block 不为 true 时的数组项。
52 array.reject! { |item| block }
当 block 为真时,从 array 删除元素,如果没有变化则返回 nil。相当于 Array#delete_if。
53 array.replace(other_array)
把 array 的内容替换为 other_array 的内容,必要的时候进行截断或扩充。
54 array.reverse
返回一个新的数组,包含倒序排列的数组元素。
55 array.reverse!
把 array 进行逆转。
56 array.reverse_each {|item| block }
与 Array#each 相同,但是把 array 进行逆转。
57 array.rindex(obj)
返回 array 中最后一个等于 obj 的对象的索引。如果未找到匹配,则返回 nil。
58 array.select {|item| block }
调用从数组传入连续元素的 block,返回一个数组,包含 block 返回 true 值时的元素。
59 array.shift
返回 self 的第一个元素,并移除该元素(把所有的其他元素下移一位)。如果数组为空,则返回 nil。
60 array.size
返回 array 的长度(元素的个数)。length 的别名。
61 array.slice(index) [or] array.slice(start, length) [or]
array.slice(range) [or] array[index] [or]
array[start, length] [or] array[range]
返回索引为 index 的元素,或者返回从 start 开始直至 length 个元素的子数组,或者返回 range 指定的子数组。负值索引从数组末尾开始计数(-1 是最后一个元素)。如果 index(或开始索引)超出范围,则返回 nil。
62 array.slice!(index) [or] array.slice!(start, length) [or]
array.slice!(range)
删除 index(长度是可选的)或 range 指定的元素。返回被删除的对象、子数组,如果 index 超出范围,则返回 nil。
63 array.sort [or] array.sort { | a,b | block }
返回一个排序的数组。
64 array.sort! [or] array.sort! { | a,b | block }
把数组进行排序。
65 array.to_a
返回 self。如果在 Array 的子类上调用,则把接收参数转换为一个 Array 对象。
66 array.to_ary
返回 self。
67 array.to_s
返回 self.join。
68 array.transpose
假设 self 是数组的数组,且置换行和列。
69 array.uniq
返回一个新的数组,移除了 array 中的重复值。
70 array.uniq!
从 self 中移除重复元素。如果没有变化(也就是说,未找到重复),则返回 nil。
71 array.unshift(obj, ...)
把对象前置在数组的前面,其他元素上移一位。
72 array.values_at(selector,...)
返回一个数组,包含 self 中与给定的 selector(一个或多个)相对应的元素。选择器可以是整数索引或者范围。
73 array.zip(arg, ...) [or]
array.zip(arg, ...){ | arr | block }
把任何参数转换为数组,然后把 array 的元素与每个参数中相对应的元素合并。

目录
相关文章
|
3月前
|
测试技术 PHP 开发者
PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?
PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?
|
7月前
|
人工智能 Java
Java 中数组Array和列表List的转换
本文介绍了数组与列表之间的相互转换方法,主要包括三部分:1)使用`Collections.addAll()`方法将数组转为列表,适用于引用类型,效率较高;2)通过`new ArrayList&lt;&gt;()`构造器结合`Arrays.asList()`实现类似功能;3)利用JDK8的`Stream`流式计算,支持基本数据类型数组的转换。此外,还详细讲解了列表转数组的方法,如借助`Stream`实现不同类型数组间的转换,并附带代码示例与执行结果,帮助读者深入理解两种数据结构的互转技巧。
367 1
Java 中数组Array和列表List的转换
|
7月前
|
JavaScript 前端开发 API
JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)
array.map()可以用来数据转换、创建派生数组、应用函数、链式调用、异步数据流处理、复杂API请求梳理、提供DOM操作、用来搜索和过滤等,比for好用太多了,主要是写法简单,并且非常直观,并且能提升代码的可读性,也就提升了Long Term代码的可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
7月前
|
移动开发 运维 供应链
通过array.some()实现权限检查、表单验证、库存管理、内容审查和数据处理;js数组元素检查的方法,some()的使用详解,array.some与array.every的区别(附实际应用代码)
array.some()可以用来权限检查、表单验证、库存管理、内容审查和数据处理等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
7月前
|
供应链 JavaScript 前端开发
通过array.every()实现数据验证、权限检查和一致性检查;js数组元素检查的方法,every()的使用详解,array.some与array.every的区别(附实际应用代码)
array.every()可以用来数据验证、权限检查、一致性检查等数据校验工作,核心在于利用其短路机制,速度更快,节约性能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
7月前
|
Web App开发 存储 前端开发
别再用双层遍历循环来做新旧数组对比,寻找新增元素了!使用array.includes和Set来提升代码可读性
这类问题的重点在于能不能突破基础思路,突破基础思路是从程序员入门变成中级甚至高级的第一步,如果所有需求都通过最基础的业务逻辑来做,是得不到成长的。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
7月前
|
数据采集 JavaScript 前端开发
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
用array.filter()来实现数据筛选、数据清洗和链式调用,相对于for循环更加清晰,语义化强,能显著提升代码的可读性和可维护性。博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
索引 Ruby
Ruby学习笔记-Array
    由于工作需要,最近在学习Ruby,现在主要在看两本书《Ruby on Rail程序设计技术详解》和《Ruby of book》。毕竟是要在工作中运用,而且时间还有限,所以我在看书和做例子的同时也简单记录下了一些基本知识点,方便用的时候查找。
831 0
|
JavaScript C# 数据库管理
ruby学习笔记(6)-Array的使用
ruby的数组基本使用,跟c#中的数组比起来,最不习惯的区别在于允许负索引(跟javascript到有几分相似) arr=[3,4,5,6,7,8,9] puts arr[0] # 3 puts arr.
945 0