Рубин - Массивы

Массивы 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