English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Массивы (Array) Ruby

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

Ниже приведены общие методы массива (предположительно) массив является Объектом массива):

НомерМетод & описание
1array & other_array
Возвращает новый массив, который содержит общие элементы двух массивов без повторений.
2array * int [или] array * str
Возвращает новый массив, который создается через соединение int копий self. При наличии String параметра это эквивалентно self.join(str).
3array + other_array
Возвращает новый массив, который создается через соединение двух массивов, производящих третий массив.
4array - other_array
Возвращает новый массив, который является копией исходного массива, из которого удалены элементы,出现的 в other_array.
5str <=> other_str
Сравнивает str с other_str, возвращает -1 (меньше), 0 (равно) или 1 (больше). Сравнение чувствительно к регистру.
6array | other_array
Через добавление other_array в array, удаляет дубликаты и возвращает новый массив.
7array << obj
Добавляет заданный объект в конец массива. Это выражение возвращает сам массив, поэтому несколько добавлений можно соединить在一起.
8array <=> other_array
Если массив меньше, равен или больше other_array, то возвращает целое число (-1, 0 или +1).
9array == other_array
если два массива содержат одинаковое количество элементов и каждый элемент равен соответствующему элементу другого массива (в соответствии с Object.==), то эти два массива равны.
10array[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.
11array[index] = obj [или]
array[start, length] = obj или an_array или nil [или]
array[range] = obj или an_array или nil

установить индекс в index элементов, или заменить start начиная с length подмассива из range указанного подмассива. Если индекс больше текущего объема массива, массив автоматически увеличивается. Негативный индекс начинается с length ноль, то вставка элемента. nil, то вставка элемента происходит с self удаление элементов.
12array.abbrev(pattern = nil)
для self вычисление четких сокращенных наборов строк. Если передается шаблон или строка, учитываются только те случаи, когда строка соответствует шаблону или начинается с этой строки.
13array.assoc(obj)
поиск массива, элементы которого также являются массивами, сравнивая obj с первым элементом каждого содержащего массива с помощью obj.==. Если совпадение найдено, возвращается первый содержащий массив, если совпадение не найдено, возвращается nil.
14array.at(index)
возвращается элемент с индексом index. Негативный индекс начинается с self начиная с конца массива. Если индекс выходит за пределы диапазона, возвращается nil.
15array.clear
удалить все элементы из массива.
16array.collect { |item| block } [или]
array.map { |item| block }

для self каждый элемент в block. Создает новый массив, содержащий значения, возвращаемые block.
17array.collect! { |item| block } [или]
array.map! { |item| block }

для self каждый элемент в block, заменяющие элементы на block возвращаемое значение.
18array.compact
Возвращает self копия, из которой удалены все nil элементы.
19array.compact!
удалить все из массива nil элементы. Если нет изменений, то возвращается nil.
20array.concat(other_array)
добавить элементы из other_array в self внутри.
21array.delete(obj) [or]
array.delete(obj) { block }

От self удалить равный obj элемента. Если не найден эквивалентный элемент, то возвращается nil. Если не найден эквивалентный элемент и предоставлен опциональный код blockесли block результат.
22array.delete_at(index)
удалить указанное index элемент в этом месте, и вернуть этот элемент. Если index выходит за пределы диапазона, то возвращается nil.
23array.delete_if { |item| block }
когда block удалить, когда self каждый элемент.
24array.each { |item| block }
для self каждый элемент в blockпередается этот элемент в качестве параметра.
25array.each_index { |index| block }
как и Array#each, но передается элемент в качестве параметра. indexпередаются, а не сам элемент.
26array.empty?
если массив сам не содержит элементов, то возвращается true.
27array.eql?(other)
如果 массив и other являются одним и тем же объектом, или два массива содержат одинаковое содержимое, то возвращается true.
28array.fetch(index) [or]
array.fetch(index, default) [or]
array.fetch(index) { |index| block }

попытка вернуть положение index элемент в этом месте. Если index находится вне массива, то первая форма выбросит IndexError исключение, вторая форма вернет defaultтретья форма вернет вызов block передаются index значение. Отрицательные значения index начиная с конца массива.
29array.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 通过带有被填充的每个元素的绝对索引来传递。
30array.first [or]
array.first(n)

返回数组的第一个元素或前 n 个元素。如果数组为空,则第一种形式返回 nil,第二种形式返回一个空的数组。
31array.flatten
返回一个新的数组,新数组是一个一维的扁平化的数组(递归)。
32array.flatten!
массив 进行扁平化。如果没有变化则返回 nil。(数组不包含子数组。)
33array.frozen?
如果 массив 被冻结(或排序时暂时冻结),则返回 true。
34array.hash
计算数组的哈希代码。两个具有相同内容的数组将具有相同的哈希代码。
35array.include?(obj)
如果 self 中包含 obj,则返回 true,否则返回 false。
36array.index(obj)
Возвращает self 中第一个等于 obj 的对象的 index。如果未找到匹配则返回 nil.
37array.indexes(i1, i2, ... iN) [or]
array.indices(i1, i2, ... iN)

该方法在 Ruby 的最新版本中被废弃,所以请使用 Array#values_at。
38array.indices(i1, i2, ... iN) [or]
array.indexes(i1, i2, ... iN)

该方法在 Ruby 的最新版本中被废弃,所以请使用 Array#values_at。
39array.insert(index, obj...)
在给定的 index 的元素前插入给定的值,index 可以是负值。
40array.inspect
创建一个数组的可打印版本。
41array.join(sep=$,)
返回一个字符串,通过把数组的每个元素转换为字符串,并使用 sep 分隔进行创建的。
42array.last [or] array.last(n)
Возвращает self 的最后一个元素。如果数组为,则第一种形式返回 nil.
43array.length
Возвращает self 中元素的个数。可能为零。
44array.map { |item| block } [or]
array.collect { |item| block }

для self Каждый элемент block вызывается один раз. block. Создает новый массив, содержащий значения, возвращаемые block.
45array.map! { |item| block } [or]
array.collect! { |item| block }

для массив Каждый элемент block вызывается один раз. block, заменяя элементы значением, возвращаемым block.
46array.nitems
Возвращает self Количество non-nil элементов в . Возможно, равно нулю.
47array.pack(aTemplateString)
На основе инструкции aTemplateString сжимает содержимое массива в двоичную последовательность. Инструкции A, a и Z могут следовать за числом, обозначающим ширину поля результата. Остальные инструкции также могут иметь число, обозначающее количество элементов массива для преобразования. Если число является астерisks (*), то все оставшиеся элементы массива будут преобразованы. После любой инструкции может следовать подчеркивание (_) для указания использования базового размера платформы, в противном случае используется единообразный размер, независимый от платформы. Пробелы в строке шаблона игнорируются.
48array.pop
От массив Извлекает последний элемент из , возвращает этот элемент. Если массив Возвращает , если он пуст. nil.
49array.push(obj, ...)
Přidává заданный obj в конец массива. Это выражение возвращает сам массив, поэтому можно объединить несколько добавлений.
50array.rassoc(key)
Поиск массива, его элементы также являются массивами, используя == по key Сравнивает со вторым элементом каждого содержащегося массива. Возвращает первый содержащий массив, если совпадение.
51array.reject { |item| block }
Возвращает новый массив, содержащий элементы массива, для которых block не является истинным.
52array.reject! { |item| block }
когда block истинен, из массив Удаляет элементы, если изменений нет, то возвращает nil. Эквивалент Array#delete_if.
53array.replace(other_array)
массив содержимого на other_array содержимого, при необходимости производя его обрезку или расширение.
54array.reverse
Возвращает новый массив, содержащий элементы массива в обратном порядке.
55array.reverse!
массив Вернуть массив в обратном порядке.
56array.reverse_each {|item| block }
Эквивалент array#each, но массив Вернуть массив в обратном порядке.
57array.rindex(obj)
Возвращает индекс последнего объекта в array, равного obj. Если не найдено совпадение, возвращает nil.
58array.select {|item| block }
Вызывает блок с последовательными элементами из массива, возвращает массив, содержащий результаты выполнения блока. true Элементы с заданным значением.
59array.shift
Возвращает self Первая элемента массива, и удаляет этот элемент (все другие элементы смещаются на один шаг вниз). Если массив пуст, возвращает nil.
60array.size
Возвращает массив Длина (количество элементов). Аlias length.
61array.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.
62array.slice!(index) [или] array.slice!(start, length) [или]
array.slice!(range)

удаление index(длина является опциональной) или range Указанный элемент. Возвращает удаленный объект, подмассив, если index Если индекс выходит за пределы диапазона, возвращает nil.
63array.sort [или] array.sort { | a,b | block }
Возвращает отсортированный массив.
64array.sort! [или] array.sort! { | a,b | block }
Сортирует массив.
65array.to_a
Возвращает self. Если в Array Если метод вызывается на подклассе, то переданные параметры преобразуются в объект Array.
66array.to_ary
Возвращает self.
67array.to_s
Возвращает self.join.
68array.transpose
Предположим, что self - это массив массивов и行列已经 транспонированы.
69массив.uniq
Возвращает новый массив, удаленный массив Удалите повторяющиеся значения.
70массив.uniq!
От self Удалите повторяющиеся элементы. Если изменений нет (то есть не найдены повторения), то верните nil.
71массив.unshift(obj, ...)
Поставьте объект спереди в начало массива, остальные элементы поднимаются на один уровень.
72массив.values_at(selector,...)
Возвращает массив, содержащий self с данными, соответствующими выборщик(один или несколько) соответствующих элементов. Выборщик может быть целым числом индекса или диапазоном.
73массив.zip(arg, ...) [или]
массив.zip(arg, ...){ | arr | block }

Конвертируйте любые параметры в массив, затем массив элементы соответствуют элементам каждого параметра.

Инструкции pack массива

В таблице ниже перечислены сжатые инструкции метода Array#pack.

ИнструкцияОписание
@Перемещение к абсолютной позиции.
AASCII-строка (заполнение space, count является шириной).
aASCII-строка (заполнение 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.
lLong.
MСсылка на printable, MIME-кодировку.
mСтрока кодирования Base64.
NLong, порядок байтов network(big-endian).
nShort, порядок байтов network(big-endian).
PУказатель на структуру (строка с фиксированной длиной).
pУказатель на строку с пустым символом окончания.
Q, q64-битное число.
SБеззнаковый short.
sShort.
UUTF-8.
uСтрока кодирования UU.
VLong, little-endian порядок байт.
vShort, little-endian порядок байт.
wBER сжатый целое \fnm.
XПерейти вперёд на один байт.
xNull байт.
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