English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Ruby массивы представляют собой有序集合 объектов с целочисленными индексами. Каждый элемент массива связан с индексом и может быть получен по индексу.
Индекс массива начинается с 0, как и в C или Java. Отрицательный индекс относителен к концу массива, то есть, индекс -1 указывает на последний элемент массива, -2 на предпоследний и так далее.
Ruby массивы могут хранить объекты таких типов, как String, Integer, Fixnum, Hash, Symbol, а также другие массивы.
Ruby массивы не требуют указания размера, при добавлении элементов Ruby массив автоматически увеличивается.
Есть несколько способов создания или инициализации массива. Один из них - это: new Классовый метод:
names = Array.new
Вы можете установить размер массива в момент его создания:
names = Array.new(20)
массив names Размер или длина составляет 20 элементов. Вы можете использовать методы size или length для получения размера массива:
#!/usr/bin/ruby names = Array.new(20) puts names.size # возвращает 20 puts names.length # возвращает 20
Результат выполнения примера выше:
20 20
Вы можете присвоить значение каждому элементу массива, как показано ниже:
#!/usr/bin/ruby names = Array.new(4, "mac") puts "#{names}"
Результат выполнения примера выше:
["mac", "mac", "mac", "mac"]
Вы также можете использовать блок с new, чтобы заполнить каждый элемент результатом вычислений блока:
#!/usr/bin/ruby nums = Array.new(10) { |e| e = e * 2 } puts "#{nums}"
Результат выполнения примера выше:
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
У массива есть и другой способ, [], вот пример:
nums = Array[(1, 2, 3, 4, 5)]
Другой формой создания массива показан ниже:}
nums = Array[1, 2, 3, 4, 5]
В Ruby ядро модуля можно иметь метод массива, который принимает один параметр и создает числовой массив с помощью аргумента диапазона:
#!/usr/bin/ruby digits = Array(0..9) puts "#{digits}"
Результат выполнения примера выше:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Нам нужен пример объекта массива, чтобы вызывать методы массива. Ниже приведен способ создания объекта массива:
Array.[](...) [или] Array[...] [или] [...]
Это вернет новый массив, заполненный заданным объектом. Теперь, используя созданный объект, мы можем вызывать любые доступные методы. Например:
#!/usr/bin/ruby digits = Array(0..9) num = digits.at(6) puts "#{num}"
Результат выполнения примера выше:
6
Ниже приведены общие методы массива (предположительно) массив является Объектом массива):
Номер | Метод & описание |
---|---|
1 | array & other_array Возвращает новый массив, который содержит общие элементы двух массивов без повторений. |
2 | array * int [или] array * str Возвращает новый массив, который создается через соединение int копий self. При наличии 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] [или] array[start, length] [или] array[range] [или] array.slice(index) [или] array.slice(start, length) [или] array.slice(range) Возвращает индекс index элементов, или возвращает от start начиная с length подмассив из n элементов, или возвращает range Указанный подмассив. Негативные индексы beginnen vom Ende des Arrays ( -1 - это последний элемент). Если indexЕсли (или начальный индекс) выходит за пределы диапазона, возвращает nil. |
11 | array[index] = obj [или] array[start, length] = obj или an_array или nil [или] array[range] = obj или an_array или 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 } [или] array.map { |item| block } для self каждый элемент в block. Создает новый массив, содержащий значения, возвращаемые block. |
17 | array.collect! { |item| block } [или] 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 удалить, когда 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) 如果 массив и 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! 把 массив 进行扁平化。如果没有变化则返回 nil。(数组不包含子数组。) |
33 | array.frozen? 如果 массив 被冻结(或排序时暂时冻结),则返回 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#values_at。 |
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. Создает новый массив, содержащий значения, возвращаемые block. |
45 | array.map! { |item| block } [or] array.collect! { |item| block } для массив Каждый элемент block вызывается один раз. block, заменяя элементы значением, возвращаемым block. |
46 | array.nitems Возвращает self Количество non-nil элементов в . Возможно, равно нулю. |
47 | array.pack(aTemplateString) На основе инструкции aTemplateString сжимает содержимое массива в двоичную последовательность. Инструкции A, a и Z могут следовать за числом, обозначающим ширину поля результата. Остальные инструкции также могут иметь число, обозначающее количество элементов массива для преобразования. Если число является астерisks (*), то все оставшиеся элементы массива будут преобразованы. После любой инструкции может следовать подчеркивание (_) для указания использования базового размера платформы, в противном случае используется единообразный размер, независимый от платформы. Пробелы в строке шаблона игнорируются. |
48 | array.pop От массив Извлекает последний элемент из , возвращает этот элемент. Если массив Возвращает , если он пуст. nil. |
49 | array.push(obj, ...) Přidává заданный obj в конец массива. Это выражение возвращает сам массив, поэтому можно объединить несколько добавлений. |
50 | array.rassoc(key) Поиск массива, его элементы также являются массивами, используя == по key Сравнивает со вторым элементом каждого содержащегося массива. Возвращает первый содержащий массив, если совпадение. |
51 | array.reject { |item| block } Возвращает новый массив, содержащий элементы массива, для которых block не является истинным. |
52 | array.reject! { |item| block } когда block истинен, из массив Удаляет элементы, если изменений нет, то возвращает nil. Эквивалент Array#delete_if. |
53 | array.replace(other_array) 把 массив содержимого на other_array содержимого, при необходимости производя его обрезку или расширение. |
54 | array.reverse Возвращает новый массив, содержащий элементы массива в обратном порядке. |
55 | array.reverse! 把 массив Вернуть массив в обратном порядке. |
56 | array.reverse_each {|item| block } Эквивалент array#each, но массив Вернуть массив в обратном порядке. |
57 | array.rindex(obj) Возвращает индекс последнего объекта в array, равного obj. Если не найдено совпадение, возвращает nil. |
58 | array.select {|item| block } Вызывает блок с последовательными элементами из массива, возвращает массив, содержащий результаты выполнения блока. true Элементы с заданным значением. |
59 | array.shift Возвращает self Первая элемента массива, и удаляет этот элемент (все другие элементы смещаются на один шаг вниз). Если массив пуст, возвращает nil. |
60 | array.size Возвращает массив Длина (количество элементов). Аlias length. |
61 | array.slice(index) [или] array.slice(start, length) [или] array.slice(range) [или] array[index] [или] array[start, length] [или] array[range] Возвращает индекс index элементов, или возвращает от start начиная с length подмассив из n элементов, или возвращает range Указанный подмассив. Негативные индексы beginnen vom Ende des Arrays ( -1 - это последний элемент). Если indexЕсли (или начальный индекс) выходит за пределы диапазона, возвращает nil. |
62 | array.slice!(index) [или] array.slice!(start, length) [или] array.slice!(range) удаление index(длина является опциональной) или range Указанный элемент. Возвращает удаленный объект, подмассив, если index Если индекс выходит за пределы диапазона, возвращает nil. |
63 | array.sort [или] array.sort { | a,b | block } Возвращает отсортированный массив. |
64 | array.sort! [или] 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 | массив.uniq Возвращает новый массив, удаленный массив Удалите повторяющиеся значения. |
70 | массив.uniq! От self Удалите повторяющиеся элементы. Если изменений нет (то есть не найдены повторения), то верните nil. |
71 | массив.unshift(obj, ...) Поставьте объект спереди в начало массива, остальные элементы поднимаются на один уровень. |
72 | массив.values_at(selector,...) Возвращает массив, содержащий self с данными, соответствующими выборщик(один или несколько) соответствующих элементов. Выборщик может быть целым числом индекса или диапазоном. |
73 | массив.zip(arg, ...) [или] массив.zip(arg, ...){ | arr | block } Конвертируйте любые параметры в массив, затем массив элементы соответствуют элементам каждого параметра. |
В таблице ниже перечислены сжатые инструкции метода Array#pack.
Инструкция | Описание |
---|---|
@ | Перемещение к абсолютной позиции. |
A | ASCII-строка (заполнение space, count является шириной). |
a | ASCII-строка (заполнение null, count является шириной). |
B | Строка бит (по убыванию) |
b | Строка бит (по возрастанию). |
C | Беззнаковый символ. |
c | Символ. |
D, d | Двойная точность числа с плавающей запятой, родной формат. |
E | Двойная точность числа с плавающей запятой, порядок байтов little-endian. |
e | Одинарная точность числа с плавающей запятой, порядок байтов little-endian. |
F, f | Одинарная точность числа с плавающей запятой, родной формат. |
G | Двойная точность числа с плавающей запятой, порядок байтов network(big-endian). |
g | Одинарная точность числа с плавающей запятой, порядок байтов network(big-endian). |
H | Строка шестнадцатеричных чисел (ранее высокое значение). |
h | Строка шестнадцатеричных чисел (ранее низкое значение). |
I | Беззнаковое целое число. |
i | Целое число. |
L | Беззнаковый long. |
l | Long. |
M | Ссылка на printable, MIME-кодировку. |
m | Строка кодирования Base64. |
N | Long, порядок байтов network(big-endian). |
n | Short, порядок байтов network(big-endian). |
P | Указатель на структуру (строка с фиксированной длиной). |
p | Указатель на строку с пустым символом окончания. |
Q, q | 64-битное число. |
S | Беззнаковый short. |
s | Short. |
U | UTF-8. |
u | Строка кодирования UU. |
V | Long, little-endian порядок байт. |
v | Short, little-endian порядок байт. |
w | BER сжатый целое \fnm. |
X | Перейти вперёд на один байт. |
x | Null байт. |
Z | Как и a, кроме null будет добавлен *. |
Попробуйте следующий пример, сжатие различных данных.
a = [ "a", "b", "c" ] n = [ 65, 66, 67 ] puts a.pack("A3A3A3") #=> "a b c " puts a.pack("a3a3a3") #=> "a\000\000b\000\000c\000\000" puts n.pack("ccc") #=> "ABC"
Результат выполнения примера выше:
a b c abc ABC