vault backup: 2026-05-18 21:11:52
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
---
|
||||
status: seed
|
||||
type: concept
|
||||
tags: []
|
||||
created: 2025-12-17
|
||||
updated: 2026-05-17
|
||||
title: 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]]
|
||||
Reference in New Issue
Block a user