Files
SecondBrain/99 System/Archive/Ruby - массивы.md
T
2026-05-31 10:18:48 +03:00

89 lines
4.7 KiB
Markdown

---
status: seed
type: concept
tags: []
created: 2025-12-17
updated: 2026-05-17
aliases:
- Ruby - массивы
---
# Ruby - массивы
Массив в Ruby - эксземпляр класса **Array**
Поскольку массивы являются объектами со своими методами, то это позволяет облегчить работу со списками данных.
Массив задается с использованием квадратных скобок, но не только.
```ruby
a1 = [...]
a2 = %w{word1 word2}
a3 = ['start', nil, 5, [...]]
a4 = Array.new
a5 = Array.new(3)
a6 = Array.new(5, "Test")
a7 = Array.new(5) { |i| i*i }
a8 = Array.[](1, 'a', /^A/)
a9 = Array[1, 'a', /^A/]
```
Ruby позволяет создавать многомерные массивы, элементы которого могут иметь разную размерность.
![[Pasted image 20260517200426.png]]
## Индексация массива
Доступ к элементам массива в Ruby осуществляется путем указщания его индекса, при этом, есть поддержка отрицательных индексом для индексации с конца.
### Размеры массива
```ruby
size == length - синонимы, позволяют узнать количество элементов в массиве
```
### Поиск элементов массива
Метод `array.include?(obj)` возвращает `true`, если объект является элементом массива `array`. Иначе - `false`.
Метод `array.index(obj)` возвращает индекс первого вхождения элемента в массив `array`, который равен искомому. Возврат `nil`, если такой элемент не был найден.
### Добавление элементов в массив
```ruby
a = [1,2,3]
a << 4
a += [5]
a.push(6)
```
Метод `array.unshift(obj)` добавляет элемент в начало массива (со сдвигом вправо уже существующих).
Метод `array.push(obj)` добавляет элемент в конец массива (синоним - `append`).
`array.index(index, obj)` вставляет полученные значения перед элементом с индексом `index`.
### Разворачивание многомерного массива в одномерный
```ruby
array.flatten()
array.flatten!() # преобразует в одномерный, заменяя первоначальный
```
### Срезы массивов
1) Использование диапазонов при индексации
2) Использование индекса и длины подмассива
3) `array.values_at(selector)` - возвращает массив, который состоит из элементов массива `array`, которые соответствуют передаеваемым селекторам.
Селекторы могут быть целыми числами (индексами) или диапазонами.
4) `array.first(n)` и `array.last(n)`, которые возвращают первые (последние) `n` элементов.
### Операции с массивом
1) `array.sample(n)` выбор случайного элемента (или `n` элементов)
2) `array.select{ |item| block }` выполняет выражение `block` для каждого элемента массива и возвращает массив, состоящий из элементов, для которых выражение принимает значение true
### Удаление из массива
1) `array.delete(obj)` - удаляет все элементы массива, которые равны `obj`. Если ничего не было удалено, то -> `nil`
2) `array.delete_at(index)` удаляет элемент с индексом `index`.
3) `array.delete_if{ |item| block }` удаляет все элементы, полходящие под условие.
4) `array.shift` удаляет первый элемент из массива и возвращает его, если нет такого, то `nil`.
5) `array.pop` удаляет *последний* элемент из массива и возвращает его.
### Полезные методы
![[Pasted image 20260517203130.png]]
![[Pasted image 20260517203153.png]]![[Pasted image 20260517203218.png]]
![[Pasted image 20260517203235.png]]
![[Pasted image 20260517203252.png]]
![[Pasted image 20260517203317.png]]
![[Pasted image 20260517203352.png]]