vault backup: 2026-05-18 21:11:52
This commit is contained in:
@@ -0,0 +1,97 @@
|
||||
---
|
||||
status: seed
|
||||
type: knowledge
|
||||
tags:
|
||||
- programming
|
||||
- ruby
|
||||
created: 2026-05-17
|
||||
updated: 2026-05-17
|
||||
title: Ruby - массивы
|
||||
source: "[[Ruby - массивы]]"
|
||||
---
|
||||
|
||||
# Ruby — массивы
|
||||
|
||||
Массив в Ruby — экземпляр класса `Array`. Поскольку массивы являются объектами со своими методами, работа со списками данных упрощается.
|
||||
|
||||
Связанные темы: [[Ruby - основы языка]]
|
||||
|
||||
## Создание массива
|
||||
|
||||
```ruby
|
||||
a1 = [1, 2, 3] # литерал
|
||||
a2 = %w{word1 word2} # массив строк без кавычек
|
||||
a3 = ['start', nil, 5, [1, 2]] # разнотипные элементы, вложенный массив
|
||||
|
||||
a4 = Array.new # пустой массив
|
||||
a5 = Array.new(3) # [nil, nil, nil]
|
||||
a6 = Array.new(5, "Test") # ["Test", "Test", ...]
|
||||
a7 = Array.new(5) { |i| i * i } # [0, 1, 4, 9, 16]
|
||||
a8 = Array.[](1, 'a', /^A/) # через метод класса
|
||||
```
|
||||
|
||||
Ruby поддерживает многомерные массивы с элементами разной размерности.
|
||||
|
||||
## Индексация
|
||||
|
||||
```ruby
|
||||
a[0] # первый элемент
|
||||
a[-1] # последний элемент
|
||||
a[-2] # предпоследний
|
||||
```
|
||||
|
||||
### Размер
|
||||
|
||||
```ruby
|
||||
a.size # количество элементов
|
||||
a.length # синоним size
|
||||
```
|
||||
|
||||
## Поиск элементов
|
||||
|
||||
```ruby
|
||||
a.include?(obj) # => true / false
|
||||
a.index(obj) # индекс первого вхождения или nil
|
||||
```
|
||||
|
||||
## Добавление элементов
|
||||
|
||||
```ruby
|
||||
a << 4 # в конец
|
||||
a += [5] # объединение
|
||||
a.push(6) # в конец (синоним: append)
|
||||
a.unshift(0) # в начало (сдвигает остальные вправо)
|
||||
a.insert(2, x) # вставить перед элементом с индексом 2
|
||||
```
|
||||
|
||||
## Удаление элементов
|
||||
|
||||
```ruby
|
||||
a.delete(obj) # удалить все вхождения obj
|
||||
a.delete_at(index) # удалить по индексу
|
||||
a.delete_if { |x| block } # удалить все, подходящие под условие
|
||||
a.shift # удалить и вернуть первый элемент
|
||||
a.pop # удалить и вернуть последний элемент
|
||||
```
|
||||
|
||||
## Срезы
|
||||
|
||||
```ruby
|
||||
a[1..3] # диапазон индексов
|
||||
a[1, 3] # начиная с индекса 1, длиной 3
|
||||
a.values_at(0, 2, 4) # элементы по перечисленным индексам или диапазонам
|
||||
a.first(n) # первые n элементов
|
||||
a.last(n) # последние n элементов
|
||||
```
|
||||
|
||||
## Полезные методы
|
||||
|
||||
```ruby
|
||||
a.flatten # развернуть многомерный массив в одномерный
|
||||
a.flatten! # то же, но изменяет сам массив
|
||||
|
||||
a.sample # случайный элемент
|
||||
a.sample(n) # n случайных элементов
|
||||
|
||||
a.select { |x| block } # массив элементов, для которых block == true
|
||||
```
|
||||
@@ -0,0 +1,121 @@
|
||||
---
|
||||
status: seed
|
||||
type: knowledge
|
||||
tags:
|
||||
- programming
|
||||
- ruby
|
||||
created: 2026-05-17
|
||||
updated: 2026-05-17
|
||||
title: Ruby - основы языка
|
||||
source: "[[Ruby - основы языка]]"
|
||||
---
|
||||
|
||||
# Ruby — основы языка
|
||||
|
||||
Ruby — объектно-ориентированный язык, но допускает процедурный стиль написания кода. Всё является объектом, включая числа и булевы значения.
|
||||
|
||||
Связанные темы: [[Ruby On Rails]]
|
||||
|
||||
## Синтаксис
|
||||
|
||||
- Знак препинания в конце строки не нужен
|
||||
- Отступы не несут синтаксического смысла (в отличие от Python)
|
||||
- Несколько команд в одной строке разделяются через `;`
|
||||
|
||||
```ruby
|
||||
puts "Hello World!"
|
||||
puts 42; puts "next line"
|
||||
```
|
||||
|
||||
## Комментарии
|
||||
|
||||
```ruby
|
||||
# однострочный комментарий
|
||||
|
||||
=begin
|
||||
многострочный
|
||||
комментарий
|
||||
=end
|
||||
```
|
||||
|
||||
## Типы данных
|
||||
|
||||
```ruby
|
||||
"Hello".class # => String
|
||||
true.class # => TrueClass
|
||||
5.class # => Integer
|
||||
6.4.class # => Float
|
||||
nil.class # => NilClass
|
||||
```
|
||||
|
||||
### Именование
|
||||
|
||||
- Переменные — с маленькой буквы: `my_var`
|
||||
- Классы — с большой буквы: `MyClass`
|
||||
- Ключевые слова языка использовать нельзя
|
||||
|
||||
### Преобразование типов
|
||||
|
||||
**Явное:**
|
||||
|
||||
| Метод | Что делает |
|
||||
|--------|-----------------------------------------|
|
||||
| `to_i` | к целому числу (дробная часть отсекается) |
|
||||
| `to_f` | к вещественному числу |
|
||||
| `to_s` | к строке |
|
||||
|
||||
**Неявное:** при математических операциях `Integer + Float` → `Float`.
|
||||
|
||||
## Управляющие конструкции
|
||||
|
||||
```ruby
|
||||
# if без ветвления
|
||||
if a > 0
|
||||
action
|
||||
end
|
||||
|
||||
# if-elsif-else
|
||||
if a > 0
|
||||
...
|
||||
elsif a == 0
|
||||
...
|
||||
else
|
||||
...
|
||||
end
|
||||
|
||||
# unless — выполнится, если условие ложно
|
||||
unless a > 0
|
||||
action
|
||||
end
|
||||
|
||||
# case
|
||||
case a
|
||||
when 1 then puts "один"
|
||||
when 2 then puts "два"
|
||||
else puts "другое"
|
||||
end
|
||||
```
|
||||
|
||||
## Циклы
|
||||
|
||||
| Оператор | Назначение |
|
||||
|----------|-----------|
|
||||
| `loop` | бесконечный цикл; выход через `break` |
|
||||
| `while` | цикл с условием выполнения |
|
||||
| `until` | цикл, пока условие ложно |
|
||||
| `for` | итератор по перечислимому объекту |
|
||||
| `next` | пропустить текущий шаг |
|
||||
| `redo` | повторить текущий шаг заново |
|
||||
|
||||
**Диапазоны в `for`:**
|
||||
|
||||
```ruby
|
||||
for i in 1..5 # от 1 до 5 включительно
|
||||
for i in 1...5 # от 1 до 4 (5 не входит)
|
||||
```
|
||||
|
||||
**Деление с остатком:**
|
||||
|
||||
```ruby
|
||||
x, r = x.divmod(n)
|
||||
```
|
||||
Reference in New Issue
Block a user