89 lines
4.7 KiB
Markdown
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]]
|