Рубин - Массивы
Массивы Ruby - это упорядоченные коллекции любого объекта с целочисленным индексом. Каждый элемент в массиве связан с индексом и ссылается на него.
Индексация массива начинается с 0, как в C или Java. Отрицательный индекс предполагается относительно конца массива, то есть индекс -1 указывает последний элемент массива, -2 - предпоследний элемент в массиве и т. Д.
Массивы Ruby могут содержать такие объекты, как String, Integer, Fixnum, Hash, Symbol и даже другие объекты Array. Массивы Ruby не такие жесткие, как массивы в других языках. Массивы Ruby автоматически увеличиваются при добавлении к ним элементов.
Создание массивов
Есть много способов создать или инициализировать массив. Один из способов - использовать новый метод класса -
names = Array.new
Вы можете установить размер массива во время создания массива -
names = Array.new(20)
Имена массивов теперь имеют размер или длину 20 элементов. Вы можете вернуть размер массива с помощью методов размера или длины -
#!/usr/bin/ruby
names = Array.new(20)
puts names.size # This returns 20
puts names.length # This also returns 20
Это даст следующий результат -
20
20
Вы можете присвоить значение каждому элементу в массиве следующим образом:
#!/usr/bin/ruby
names = Array.new(4, "mac")
puts "#{names}"
Это даст следующий результат -
["mac", "mac", "mac", "mac"]
Вы также можете использовать блок с новым, заполняя каждый элемент тем, что оценивает блок -
#!/usr/bin/ruby
nums = Array.new(10) { |e| e = e * 2 }
puts "#{nums}"
Это даст следующий результат -
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Есть еще один метод Array, []. Это работает так -
nums = Array.[](1, 2, 3, 4,5)
Еще одна форма создания массива следующая:
nums = Array[1, 2, 3, 4,5]
Модуль ядра, доступный в ядре Ruby, имеет метод Array, который принимает только один аргумент. Здесь метод принимает диапазон в качестве аргумента для создания массива цифр -
#!/usr/bin/ruby
digits = Array(0..9)
puts "#{digits}"
Это даст следующий результат -
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Встроенные методы массива
Нам нужен экземпляр объекта Array для вызова метода Array. Как мы видели, следующий способ создать экземпляр объекта Array:
Array.[](...) [or] Array[...] [or] [...]
Это вернет новый массив, заполненный данными объектами. Теперь, используя созданный объект, мы можем вызывать любые доступные методы экземпляра. Например -
#!/usr/bin/ruby
digits = Array(0..9)
num = digits.at(6)
puts "#{num}"
Это даст следующий результат -
6
Sr. No. | Методы и описание |
---|---|
1 | array & other_array Возвращает новый массив, содержащий элементы, общие для двух массивов, без дубликатов. |
2 | array * int [or] array * str Возвращает новый массив, созданный путем объединения копий int типа self. С аргументом String, эквивалентным self.join (str). |
3 | array + other_array Возвращает новый массив, построенный путем объединения двух массивов вместе для создания третьего массива. |
4 | array - other_array Возвращает новый массив, который является копией исходного массива, удаляя все элементы, которые также появляются в other_array. |
5 | array <=> other_array Сравнивает str с other_str, возвращая -1 (меньше), 0 (равно) или 1 (больше). При сравнении учитывается регистр. |
6 | array | other_array Возвращает новый массив, объединяя массив с other_array, удаляя дубликаты. |
7 | array << obj Помещает данный объект в конец массива. Это выражение возвращает сам массив, поэтому несколько добавлений могут быть связаны вместе. |
8 | array <=> other_array Возвращает целое число (-1, 0 или +1), если этот массив меньше, равен или больше other_array. |
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) Возвращает элемент по индексу или возвращает подмассив, начинающийся с начала и продолжающийся для элементов длины , или возвращает подмассив, указанный диапазоном . Отрицательные индексы отсчитываются в обратном порядке от конца массива (-1 - последний элемент). Возвращает nil, если индекс (или начальный индекс) выходит за пределы допустимого диапазона. |
11 | array[index] = obj [or] array[start, length] = obj or an_array or nil [or] array[range] = obj or an_array or nil Устанавливает элемент по индексу или заменяет подмассив, начинающийся с начала и продолжающийся для элементов длины , или заменяет подмассив, указанный диапазоном . Если индексы превышают текущую емкость массива, массив автоматически увеличивается. Отрицательные индексы будут отсчитываться в обратном порядке от конца массива. Вставляет элементы, если длина равна нулю. Если nil используется во второй и третьей форме, удаляет элементы из self . |
12 | array.abbrev(pattern = nil) Вычисляет набор однозначных сокращений для строк в self . Если передан шаблон или строка, учитываются только строки, соответствующие шаблону или начинающиеся со строки. |
13 | array.assoc(obj) Выполняет поиск в массиве, элементы которого также являются массивами, сравнивая obj с первым элементом каждого содержащегося массива, используя obj. ==. Возвращает первый содержащий совпадение массив или ноль, если совпадение не найдено. |
14 | array.at(index) Возвращает элемент по индексу. Отрицательный индекс отсчитывается от конца self. Возвращает ноль, если индекс вне допустимого диапазона. |
15 | array.clear Удаляет все элементы из массива. |
16 | array.collect { |item| block } [or] array.map { |item| block } Вызывает блок один раз для каждого элемента self . Создает новый массив, содержащий значения, возвращаемые блоком. |
17 | array.collect! { |item| block } [or] array.map! { |item| block } Вызывает блок один раз для каждого элемента self , заменяя элемент значением, возвращаемым блоком . |
18 | array.compact Возвращает копию self со всеми удаленными элементами nil . |
19 | array.compact! Удаляет нулевые элементы из массива. Если никаких изменений не было, возвращает ноль . |
20 | array.concat(other_array) Добавляет элементы из other_array к self . |
21 год | array.delete(obj) [or] array.delete(obj) { block } Удаляет из себя элементы , которые равны obj . Если элемент не найден, возвращается ноль . Если задан дополнительный блок кода , возвращает результат блока, если элемент не найден. |
22 | array.delete_at(index) Удаляет элемент по указанному индексу , возвращая этот элемент, или nil, если индекс выходит за пределы допустимого диапазона. |
23 | array.delete_if { |item| block } Удаляет каждый элемент self, для которого значение блока истинно. |
24 | array.each { |item| block } Вызывает блок один раз для каждого элемента в self , передавая этот элемент в качестве параметра. |
25 | array.each_index { |index| block } То же, что и Array # each, но передает индекс элемента вместо самого элемента. |
26 | array.empty? Возвращает true, если массив self не содержит элементов. |
27 | array.eql?(other) Возвращает истину, если array и other являются одним и тем же объектом или оба массива с одинаковым содержимым. |
28 | array.fetch(index) [or] array.fetch(index, default) [or] array.fetch(index) { |index| block } Пытается вернуть элемент в позиции index . Если индекс находится вне массива, первая форма выдает исключение IndexError , вторая форма возвращает значение по умолчанию , а третья форма возвращает значение вызывающего блока , передавая индекс . Отрицательные значения индекса отсчитывают от конца массива. |
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 эквивалентна self.length . Последние три формы заполняют массив значением блока. Блок передается с абсолютный индекс каждого элемента, подлежащего заполнению. |
30 | array.first [or] array.first(n) Возвращает первый элемент или первые n элементов массива. Если массив пуст, первая форма возвращает ноль , а вторая форма возвращает пустой массив. |
31 год | array.flatten Возвращает новый массив, который является одномерным сглаживанием этого массива (рекурсивно). |
32 | array.flatten! Сглаживает массив на месте. Возвращает ноль, если никаких изменений не было. (массив не содержит подмассивов.) |
33 | array.frozen? Возвращает true, если массив заморожен (или временно заморожен во время сортировки). |
34 | array.hash Вычисляет хэш-код для массива. Два массива с одинаковым содержимым будут иметь одинаковый хэш-код. |
35 год | array.include?(obj) Возвращает true, если obj присутствует в self , иначе false. |
36 | array.index(obj) Возвращает индекс первого объекта в self, который == для obj. Возвращает ноль, если совпадений не найдено. |
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...) Вставляет заданные значения перед элементом с заданным индексом (который может быть отрицательным). |
40 | array.inspect Создает версию массива для печати. |
41 год | array.join(sep = $,) Возвращает строку, созданную преобразованием каждого элемента массива в строку, разделенную sep . |
42 | array.last [or] array.last(n) Возвращает последний элемент (ы) self . Если массив пуст , первая форма возвращает ноль . |
43 | array.length Возвращает количество элементов в себе . Может быть нулевым. |
44 | array.map { |item| block } [or] array.collect { |item| block } Вызывает блок один раз для каждого элемента self . Создает новый массив, содержащий значения, возвращаемые блоком. |
45 | array.map! { |item| block } [or] array.collect! { |item| block } Вызывает блок один раз для каждого элемента массива , заменяя элемент значением, возвращаемым блоком. |
46 | array.nitems Возвращает количество ненулевых элементов в self . Может быть нулевым. |
47 | array.pack(aTemplateString) Упаковывает содержимое массива в двоичную последовательность в соответствии с директивами в TemplateString. За директивами A, a и Z может следовать счетчик, который дает ширину результирующего поля. Остальные директивы также могут иметь счетчик, указывающий количество элементов массива для преобразования. Если счетчик обозначен звездочкой (*), все оставшиеся элементы массива будут преобразованы. Любая из директив по-прежнему может сопровождаться подчеркиванием (_), чтобы использовать собственный размер базовой платформы для указанного типа; в противном случае они используют размер, не зависящий от платформы. Пробелы в строке шаблона игнорируются. |
48 | array.pop Удаляет последний элемент из массива и возвращает его, или ноль, если массив пуст. |
49 | array.push(obj, ...) Вставляет (добавляет) заданный объект в конец этого массива. Это выражение возвращает сам массив, поэтому несколько добавлений могут быть связаны вместе. |
50 | array.rassoc(key) Выполняет поиск в массиве, элементы которого также являются массивами. Сравнивает ключ со вторым элементом каждого содержащегося массива, используя ==. Возвращает первый совпадающий содержащийся массив. |
51 | array.reject { |item| block } Возвращает новый массив , содержащий всевозможное массив , для которого блок не является истинным . |
52 | array.reject! { |item| block } Удаляет элементы из массива, для которых блок имеет значение true , но возвращает ноль, если не было сделано никаких изменений. Эквивалентно массиву # 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) Возвращает индекс последнего объекта в массиве == в obj. Если совпадений не найдено, возвращает ноль . |
58 | array.select {|item| block } Вызывает блок, передавая последовательные элементы из массива, возвращая массив, содержащий те элементы, для которых блок возвращает истинное значение. |
59 | array.shift Возвращает первый элемент self и удаляет его (сдвигая все остальные элементы на один вниз). Возвращает nil, если массив пуст. |
60 | array.size Возвращает длину массива (количество элементов). Псевдоним длины. |
61 | array.slice(index) [or] array.slice(start, length) [or] array.slice(range) [or] array[index] [or] array[start, length] [or] array[range] Возвращает элемент по индексу или возвращает подмассив, начинающийся с начала и продолжающийся для элементов длины , или возвращает подмассив, указанный диапазоном . Отрицательные индексы отсчитываются в обратном порядке от конца массива (-1 - последний элемент). Возвращает ноль, если индекс (или начальный индекс) выходит за пределы допустимого диапазона. |
62 | array.slice!(index) [or] array.slice!(start, length) [or] array.slice!(range) Удаляет элемент (ы), заданный индексом (необязательно с длиной) или диапазоном . Возвращает удаленный объект, подмассив или ноль, если индекс вне допустимого диапазона. |
63 | array.sort [or] array.sort { | a,b | block } Возвращает новый массив, созданный путем сортировки self. |
64 | array.sort! [or] array.sort! { | a,b | block } Сортирует себя. |
65 | array.to_a Возвращает себя . Если вызывается в подклассе Array , преобразует получатель в объект Array. |
66 | array.to_ary Возвращает себя. |
67 | array.to_s Возвращает self.join. |
68 | array.transpose Предполагает, что self является массивом массивов и меняет местами строки и столбцы. |
69 | array.uniq Возвращает новый массив, удаляя повторяющиеся значения в массиве . |
70 | array.uniq! Удаляет повторяющиеся элементы из себя . Возвращает nil, если не было внесено никаких изменений (то есть дубликаты не найдены). |
71 | array.unshift(obj, ...) Добавляет объекты к началу массива, другие элементы - вверх. |
72 | array.values_at(selector,...) Возвращает массив, содержащий элементы self, соответствующие данному селектору (одному или нескольким). Селекторы могут быть целыми индексами или диапазонами. |
73 | array.zip(arg, ...) [or] array.zip(arg, ...){ | arr | block } Преобразует любые аргументы в массивы, затем объединяет элементы массива с соответствующими элементами из каждого аргумента. |
Директивы пакета массивов
Sr. No. | Директива и описание |
---|---|
1 | @ Перемещается в абсолютное положение. |
2 | A Строка ASCII (заполнена пробелами, количество равно ширине). |
3 | a Строка ASCII (заполнена нулем, количество равно ширине). |
4 | B строка (в порядке убывания битов). |
5 | b Битовая строка (возрастающий битовый порядок). |
6 | C Беззнаковый символ. |
7 | c Char. |
8 | D, d Число с плавающей запятой двойной точности, собственный формат. |
9 | E Число с плавающей запятой двойной точности, порядок байтов с прямым порядком байтов. |
10 | e Число с плавающей запятой одинарной точности, порядок байтов с прямым порядком байтов. |
11 | F, f Число с плавающей точкой одинарной точности, собственный формат. |
12 | G Число с плавающей запятой двойной точности, сетевой порядок байтов (прямой порядок байтов). |
13 | g Число с плавающей запятой одинарной точности, сетевой порядок байтов (с прямым порядком байтов). |
14 | H Шестигранная нить (сначала большой полубайт). |
15 | h Шестнадцатеричная строка (сначала малый полубайт). |
16 | I Беззнаковое целое. |
17 | i Целое число. |
18 | L Без подписи долго. |
19 | l Долго. |
20 | M Цитируется для печати, кодировка MIME (см. RFC 2045). |
21 год | m Строка в кодировке Base64. |
22 | N Длинный сетевой порядок байтов (с прямым порядком байтов). |
23 | n Короткий сетевой (с прямым порядком байтов) порядок байтов. |
24 | P Указатель на структуру (строка фиксированной длины). |
25 | p Указатель на строку с завершающим нулем. |
26 | Q, q 64-битное число. |
27 | S Беззнаковый короткий. |
28 | s Короткий. |
29 | U UTF-8. |
30 | u Строка в кодировке UU. |
31 год | V Длинный порядок байтов с прямым порядком байтов. |
32 | v Короткий порядок байтов с прямым порядком байтов. |
33 | w Целое число со сжатием BER \ fnm. |
34 | X Сделайте резервную копию байта. |
35 год | x Нулевой байт. |
36 | 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